Java 桌面程序中使用 Vue 开发界面,可以采用 "Java 后端 + Vue 前端" 的混合架构,通过内嵌浏览器组件来运行 Vue 页面。这种方案结合了 Java 的桌面应用能力和 Vue 的现代前端开发体验。
以下是实现方案和关键代码:
Java 端:使用 JavaFX 的 WebView 组件作为内嵌浏览器
Vue 端:常规 Vue 项目,通过 HTTP 或本地文件与 Java 通信
通信方式:JavaScript 与 Java 的桥接机制
Java桌面程序内嵌浏览器
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
// 创建WebView组件
WebView webView = new WebView();
WebEngine webEngine = webView.getEngine();
// 暴露Java对象给JavaScript调用
JSObject window = (JSObject) webEngine.executeScript("window");
window.setMember("javaBridge", new JavaBridge());
// 加载Vue构建后的index.html文件
// 注意:实际路径需要根据你的项目结构调整
String url = getClass().getResource("/web/dist/index.html").toExternalForm();
webEngine.load(url);
// 设置窗口
Scene scene = new Scene(webView, 1024, 768);
primaryStage.setTitle("Java + Vue 桌面应用");
primaryStage.setScene(scene);
primaryStage.show();
}
// Java与JavaScript通信的桥接类
public class JavaBridge {
// 示例方法:接收来自Vue的消息
public void receiveMessageFromVue(String message) {
System.out.println("收到Vue的消息: " + message);
// 可以在这里处理业务逻辑,然后返回结果给Vue
// 调用JavaScript的方法
WebEngine webEngine = ((WebView) ((Scene) ((Stage)
((javafx.scene.Parent) webView.getParent()).getScene().getWindow()).getScene()).getRoot()).getEngine();
webEngine.executeScript("receiveMessageFromJava('Java已收到消息: " + message + "')");
}
// 其他业务方法...
public String getSystemInfo() {
return "操作系统: " + System.getProperty("os.name") +
", Java版本: " + System.getProperty("java.version");
}
}
public static void main(String[] args) {
launch(args);
}
}

Vue 项目构建:创建常规 Vue 项目:vue create my-vue-ui开发完成后执行构建:npm run build将生成的 dist 目录复制到 Java 项目的资源目录(如 src/main/resources/web)
Java 项目配置:添加 JavaFX 依赖添加 JavaScript 桥接所需的库(如 jfxrt.jar)确保 Vue 构建文件被正确打包到最终的 JAR 中
通信原理:Java 通过JSObject暴露对象给 JavaScriptJavaScript 通过window.javaBridge调用 Java 方法Java 通过webEngine.executeScript()调用 JavaScript 方法
如果不想使用 JavaFX,还可以思考:
Electron + Java:使用 Electron 运行 Vue,通过进程间通信调用 Java 后端
SWT + Browser:使用 Eclipse SWT 的 Browser 组件替代 JavaFX WebView
JxBrowser:商业级的 Java 浏览器组件,功能更强劲但需要授权
这种混合开发模式可以让你充分利用 Vue 的前端开发效率和 Java 的后端处理能力,同时保持桌面应用的特性。