部署 JavaFx 应用程序 jar



我还在学习!! 我正在使用 IDEA 2020.1 社区、Windows 10、Java 1.8、JavaFx 11.02 和 Gluon SceneBuilder 8.5.0

我的应用程序(附加了 rar 文件(使用两个模块并且工作正常,包括作为 launc4j 生成的 exe 文件。

然后为了继续学习,我添加了带有WebView的第二个阶段,以将一个小的用户指南显示为单个html文件。 主级和辅助级都使用相同的控制器,其中初始化帮助窗口:

// initializing help window
@FXML
public void initialize() throws IOException {
webEngine = helpWebView.getEngine();
File file = new File(String.valueOf(getClass().getResource("RateCalculatorHelp.html")));
fpath = file.getPath();
webEngine.load(fpath);
}

辅助阶段由 Main.start 提供给控制器:

RateOfChangeController controller = loader.getController();
controller.initHelpStage(anotherStage);

控制器使用 helpStage 变量来显示或关闭窗口:

public void initHelpStage(Stage anotherStage) {
helpStage =  anotherStage;
}
public void showUserGuide(ActionEvent actionEvent) {
helpStage.show();
}
public void quitApp(ActionEvent actionEvent) {
helpStage.close();
System.exit(0);
}

它在 IDEA 中运行 Main 时工作文件。然后我制作了一个 jar 文件。从内部运行它时 IDEA 一切 除了帮助窗口外,工作正常,它显示但为空,html文件未加载! html文件是 包含在罐子里。

配置工件时出现问题? 非常欢迎一些建议或相关示例的指示。

我找到了以下解决方法:控制器中的一种方法将读取 html 文件 et 将其内容作为字符串返回:

public String readFromFile(String filename) throws IOException {
// borrowed from alvinalexander.com
InputStream is = getClass().getResourceAsStream(filename);
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuffer sb = new StringBuffer();
String line;
while ((line = br.readLine()) != null) { sb.append(line); }
is.close();
return sb.toString();
}

然后控制器的 initialize(( 方法变为:

// initializing help window
@FXML
public void initialize() throws IOException {
webEngine = helpWebView.getEngine();
String html = readFromFile("RateCalculatorHelp.html");
webEngine.loadContent(html);
}

现在,它从 IDEA 运行的 jar 文件工作,通过在 Windows 资源管理器中双击 jar 文件,或者以 launc4j 生成的 exe 文件的形式工作。

我仍然有兴趣听到任何可以解释为什么第一个版本不起作用的人!

最新更新