PC客户端开发利器: 使用JavaFx WebView技术大幅提升开发效率
当前开发PC客户端技术路线还是很多,比如使用windows技术,或electronjs,或最新的tauri,flutter等。JavaFx是使用Java语言开发客户端程序的一个方案。但大部分人做Web开发的人,对于JavaFx不是很熟悉,所以往往就选择electronjs技术方案了。
Electronjs的缺点很多,但最大的优点是开发效率高。使用CSS, Html很快就能搞出漂亮的界面。所以能忍就忍吧。
我用过Electron,也用过JavaFx。我是做了很多年Java开发,用JavaFx问题不大,但谈不上熟练使用,所以开发效率是最大的问题,对于Electron的缺点经常性的无法忍受,所以时不时的在这两个技术里切换。最近研究了JavaFx的Webview技术,初步判断可以用Webview大幅提升开发效率。本质上使用Webview是使用CSS+Html来开发。需要Java的时候,JavaFx可以很好的和Javascript进行交互,互相调用,传递数据。
今天抽空做了一个小Demo,大家可以感受下。
package com.example.demo1;
import javafx.application.Application;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.concurrent.Worker;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.web.WebEngine;
import javafx.scene.web.WebView;
import javafx.stage.Stage;
import netscape.javascript.JSObject;
public class HelloApplication extends Application {
@Override
public void start(Stage stage) {
WebView webView = new WebView();
webView.setPrefSize(800, 600);
WebEngine webEngine = webView.getEngine();
webEngine.setJavaScriptEnabled(true);
webEngine.setOnError(event -> System.out.println(event.getMessage()));
webEngine.setOnAlert(event -> System.out.println(event.getData()));
webEngine.getLoadWorker().stateProperty().addListener(
new ChangeListener() {
@Override
public void changed(ObservableValue observable, Object oldValue, Object newValue) {
if (newValue != Worker.State.SUCCEEDED) {
return;
}
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("myObject", new MyObject());
}
}
);
webEngine.load("file:///Users/shan/Documents/projects/demo/build/index.html");
VBox vBox = new VBox(webView);
Scene scene = new Scene(vBox, 800, 600);
stage.setTitle("Hello!");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch();
}
}