部署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的主要内容,如果未能解决你的问题,请参考以下文章

部署 JavaFX 应用程序、创建 JAR 和自包含应用程序以及本机安装程序的最佳方式是啥

如何在单个.JAR中签署和部署JavaFX应用程序?

ProGuard 破坏 JavaFX 应用程序

JavaFX应用程序 - 需要签名的内容?

分发/部署 JavaFX 应用程序

使用 maven 部署 javafx hsqldb 项目