部署JavaFx应用程序jar
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了部署JavaFx应用程序jar相关的知识,希望对你有一定的参考价值。
我还在学习!!!我使用的是IDEA 2020.1 Community,Windows 10,Java 1.8,JavaFx 11.02 ans 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);
Controller使用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文件是包含在jar文件中的。
配置工件时有问题吗? 如果能给我一些建议或相关的例子,我将非常欢迎。
答案
我发现了以下的解决方法:在Controller中的一个方法将读取html文件,并将其内容作为字符串返回。
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);
}
现在,通过在Windows资源管理器中双击从IDEA中运行的jar文件,或者以launc4j生成的exe文件的形式运行,它就可以工作了。
我仍然有兴趣听到有人能解释为什么第一个版本不能工作!
以上是关于部署JavaFx应用程序jar的主要内容,如果未能解决你的问题,请参考以下文章