JavaFX-11 с VSCode - PullRequest
       82

JavaFX-11 с VSCode

0 голосов
/ 24 января 2019

Я, должно быть, упускаю что-то очевидное здесь ... Я экспериментирую с VSCode (из Eclipse), но я не могу получить VSCode, чтобы увидеть библиотеки JavaFX11. В операторах импорта все ссылки на компоненты JavaFX отмечены:

[Java] The import javafx cannot be resolved

В Eclipse это обрабатывается «Библиотекой пользователя», которая создает запись в .classpath

<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11">
    <attributes>
        <attribute name="module" value="true"/>
    </attributes>
</classpathentry>

Хотя VSCode, похоже, понимает остальную часть .classpath из Eclipse, он этого не понимает. Замена атрибута пути на фактическое местоположение на диске также не работает.

Для наглядности:

  • Этот вопрос конкретно относится к Java 11. В более ранних версиях Java JavaFX входил в состав JDK. В Java 11 он был перенесен в набор внешних модулей.
  • Я не хочу использовать Maven или Gradle. Мне нужно напрямую ссылаться на модули без использования инструмента сборки.

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

Ответы [ 2 ]

0 голосов
/ 10 февраля 2019

Мне кажется, я нашел более простой ответ!

  1. Запустите исполняемый файл, который устанавливает ваш JDK, например: jdk-8u201-windows-x64
  2. Переустановите и выберите вариантдополнительные функции, в том числе JavaFX, установленные локально.

После завершения установки Visual Studio смогла просмотреть файлы, и доступ к ним больше не был ограничен.

Если это не работает, яделал две другие вещи раньше, пока я решал проблемы (ни одна из них не решила проблему, но одна из них могла повлиять на результат переустановки JDK):

  1. Я добавилкосая черта до конца пути к JDK, например: "C: \ Program Files \ Java \ jdk1.8.0_201 \"

  2. Перед переустановкой JDK я подключил к нему затмение и добавил правило неограниченного доступа
0 голосов
/ 24 января 2019

Я собираюсь запустить образец HelloFX для Eclipse из примеров OpenJFX .

После того, как я открою образец с помощью VSCode, я вижу сообщение об ошибке: [Java] The import javafx cannot be resolved [268435846].

JavaFX Error

Это, очевидно, означает, что классы JavaFX не разрешены, и даже если в файле .classpath есть запись:

<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/JavaFX11"/>

эта библиотека не может быть разрешена.

Решение JavaFX SDK

Поэтому я собираюсь заменить эту переменную фактическими банками из моего локального JavaFX SDK :

<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.base.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.graphics.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.controls.jar"/>
<classpathentry kind="lib" path="/Users/<user>/Downloads/javafx-sdk-11.0.2/lib/javafx.fxml.jar"/>

После обновления проекта я вижу под JAVA DEPENDENCIES эти банки.

JavaFX SDK

Пока ошибка кажется исправленной, проект все ещене удается построить.

Решение JRE

Нам нужно установить JDK 11 для проекта, поэтому скачайте его с здесь .Затем откройте Eclipse и добавьте его в установленные JRE.В Java -> Installed JREs -> Execution Environments я вижу, что для версии 11 имя JavaSE-11.

Файл .classpath из проекта helloFX также содержит ссылку на JRE:

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/
    org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JDK11">
    <attributes>
        <attribute name="module" value="true"/>
    </attributes>
</classpathentry>

поэтому я собираюсь заменить JDK11 на JavaSE-11 и обновить проект.Я вижу под JAVA DEPENDENCIES, что есть ссылка на JRE System Library [JavaSE-11].

Решение JAVA_HOME

Нам нужно установить java.home в VSCode.

Это можно сделать в settings.json в «Предпочтения-> Настройки-> Настройки рабочего пространства»:

{
   "java.dependency.packagePresentation": "hierarchical",
   "java.home":"/Users/<user>/Downloads/jdk-11.0.2.jdk/Contents/Home"
}

JavaHome

После измененияэто, вы получите всплывающее окно с сообщением Java Language Server configuration changed, please restart VS Code., поэтому перезапустите его.

Попробуйте его

Мы видим, что ошибок нет, тамэто даже папка bin с результатом сборки, который автоматически делает VSCode.

Можем ли мы ее запустить?Если мы попробуем это сделать, мы получим ошибку:

Error: JavaFX runtime components are missing, and are required to run this application

Error JavaFX missing

Это ошибка, которую вы получаете при использовании JavaFX 11 без указанияmodule-path.

Решение аргументов VM

Последний шаг заключается в добавлении необходимых аргументов vm.

Это можно сделать в launch.json файл.Он содержит конфигурацию по умолчанию, которую мы можем изменить, добавив новую запись для vmArgs, включая --module-path с локальным путем к JavaFX SDK и --add-modules с необходимыми модулями JavaFX:

{
    "configurations": [
        {
            "type": "java",
            "name": "CodeLens (Launch) - Main",
            "request": "launch",
            "vmArgs": "--module-path /Users/<user>/Downloads/javafx-sdk-11.0.2/lib
                --add-modules javafx.controls,javafx.fxml",
            "mainClass": "hellofx.Main",
            "projectName": "hellofx"
        }
    ]
}

Теперь у нас все установлено.

Запустите проект еще раз, и он должен работать.

Running JavaFX 11

Обратите внимание, что я впервые пользуюсь VSCode, поэтому явозможно, пропустил что-то очевидное, и, возможно, некоторые из этих шагов можно было бы избежать или упростить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...