Развертывание jar-файла приложения JavaFx - PullRequest
0 голосов
/ 26 мая 2020

Я все еще учусь !!! Я использую IDEA 2020.1 Community, Windows 10, Java 1.8, JavaFx 11.02 и Gluon SceneBuilder 8.5.0

Мое приложение (прикрепленный файл rar) использует два модуля и работает нормально, в том числе как exe файл, созданный launc4j.

Затем, чтобы продолжить обучение, я добавил второй этап с 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);
    }

Он работает с файлом при запуске Main в IDEA. Затем я создал файл jar. При запуске из IDEA все работает нормально, кроме окна справки, оно появляется, но пусто, файл html не загружается! А файл html включен в банку.

Проблема в настройке артефакта? Некоторые советы или указатели на соответствующие примеры были бы весьма кстати.

1 Ответ

0 голосов
/ 29 мая 2020

Я нашел следующий обходной путь: метод в контроллере прочитает файл 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);
    }

И теперь он работает из jar-файла, запущенного из IDEA, двойным щелчком по jar-файлу в Windows Explorer, или в форме exe-файла, созданного launc4j.

Мне все еще интересно услышать от любого, кто мог бы объяснить, почему первая версия не сработала!

...