it-swarm.com.ru

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

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

5
PatrickJ

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

Что касается Apache NetBeans 9.0, текущие файлы сборки ant для проекта JavaFX пока не поддерживают JavaFX 11. Он всегда ищет jar-файл 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 library

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

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

module javafx11 {
    requires javafx.controls;

    exports javafx11;
}

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

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

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

Java-проект

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

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

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

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

JavaFX 11

Maven

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

Просто создайте проект 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.

8
José Pereda

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

0
mipa

Это проблема с NetBeans 9. Я использовал Sun JDK, теперь Oracle JDK, много лет с NetBeans. В Netbeans 7.2 была возможность добавить JAR-файлы JFX вручную. Затем JFX был встроен в Oracle JDK8, и эта опция сейчас недоступна…. Несколько недель назад мне сообщили, что Oracle JDK больше не будет бесплатным в следующем году, поэтому я начал переходить на Open JDK10, и я У меня та же проблема, что и у вас. Это потому, что Open JFX не встроен в Open JDK. Если вы попробуете с Oracle JDK11, который уже является GA, у вас не возникнет проблем со сборкой приложений JFX. Проблема заключается в том, что когда вы устанавливаете в NetBeans как Java Platform открытый JDK, он ожидает, что JFX будет находиться внутри самого JDK, но Netbeans не будет запрашивать у вас папку JFX или что-то подобное, как в предыдущих версиях.

0
bichoFlyer