Библиотека развертывания JavaFX не найдена в активном JDK



Я мигрирую на OpenJDK 11 и OpenJFX 11. Я успешно построил оба из исходного кода, и в соответствии с openjfx wiki использовал --with-import-modules=[path_to_modular_sdk] arg для сборки JDK. все идет хорошо, пока я не попытаюсь построить простой тестовый проект " Hello World "в Apache Netbeans 9; на этом этапе я получаю следующую ошибку:"Библиотека развертывания JavaFX не найдена в active JDK". Попытался найти информацию об этом, но не смог найти ничего подходящего. Если бы кто-нибудь мог ... пролить свет на то, что является причиной этого я был бы очень признателен.
Спасибо за любую помощь.
Патрик.

1264   2  

2 ответов:

Как указывает @mipa, вам не нужно создавать ни Java 11, ни JavaFX 11, чтобы перенести существующие проекты.

Что касается Apache NetBeans 9.0, то текущие файлы сборки ant для проекта JavaFX пока не поддерживают JavaFX 11. Он всегда ищет банку JavaFX, и он остановится, когда ее не найдут. Это как-то наследуется от старых дней (до Java 8), Когда JavaFX не был частью JDK, и вы должны были добавить jar вручную.

Например, когда вы пытаетесь создайте новый проект JavaFX, вы получите эту ошибку:

среда NetBeans

Но это не значит, что вы не можете запустить JavaFX 11, с NetBeans 9.0 или без него.

Запуск на терминале

Вы можете запустить свой проект Java / JavaFX 11 с терминала. Вы можете следовать этому руководству по началу работы для подробного пошагового руководства.

В двух словах, все, что вам нужно, это:
export PATH_TO_FX=/path/to/javafx-sdk-11/lib
javac --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX.java
java --module-path $PATH_TO_FX --add-modules=javafx.controls HelloFX

Где HelloFX.java - это:

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class HelloFX extends Application {

    @Override
    public void start(Stage stage) {
        String version = System.getProperty("java.version");
        Label l = new Label ("Hello, JavaFX 11, running on " + version);
        Scene scene = new Scene(new StackPane(l), 300, 200);
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch();
    }

}

Модульный Проект

Создайте модульный проект на NetBeans 9.0 и добавьте модуль (для простоты я назвал его javafx11, что не является рекомендуемым именем).

Прежде чем добавить код, давайте добавим библиотеку JavaFX в путь к модулю.

Библиотека JavaFX

Эта библиотека - просто папка под моей локальной загрузкой JavaFX: /Users/<user>/Downloads/javafx-sdk-11/lib/. Конечно, если вы построили его сами, вы можете указать на это место.

Теперь я могу определить модуль:

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

И добавьте вышеупомянутый класс HelloFX в пакет javafx11.

Теперь проект будет работать отлично.

Даже если вы все еще используете ant, в этом случае файлы сборки обновляются в соответствии с изменениями пути к модулю, и нет ничего конкретного JavaFX, поэтому проект запускается без каких-либо проблем.

Java project

Если модульный проект работает, то обычный Java-проект будет работать также и на NetBeans 9.0.

Создайте проектJava (опять же, не проект JavaFX ), добавьте библиотеку JavaFX в путь к модулю, как указано выше, и теперь вам нужно будет добавить эти параметры виртуальной машины как для компиляции, так и для запуска:

 --module-path=/path/to/javafx-sdk-11/lib --add-modules=javafx.controls

Проект должен работать нормально.

JavaFX 11

Maven

Другой подход заключается в использовании Maven или Gradle вместо ant.

Просто создайте проект Maven - > JavaFX, измените pom.xml-файл и добавить Зависимости JavaFX:

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>11-ea+23</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>11-ea+23</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <release>11</release>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.ow2.asm</groupId>
                    <artifactId>asm</artifactId>
                    <version>6.1.1</version>
                    <!--  Use newer version of ASM  -->
                </dependency>
            </dependencies>
        </plugin>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
                <version>1.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>javafx11.HelloFX</mainClass>
                </configuration>
        </plugin>
    </plugins>
</build>

Очистка, сборка и запуск от NetBeans, это должно работать просто отлично.

Для Gradle то же самое можно сделать, если включить плагин Gradle для NetBeans.

Вы говорите, что переходите на OpenJDK11/OpenJFX11, но почему вы начинаете эту работу, создавая JDK и JFX самостоятельно? Было бы намного проще просто загрузить сборку советника отсюда http://jdk.java.net/11/ и здесь http://jdk.java.net/openjfx/ Кроме того, начиная с JDK11 JavaFX больше не является частью JDK, поэтому он может быть построен отдельно от JDK. Я не уверен, что ваши инструкции по сборке актуальны.

Comments

    Ничего не найдено.