Java не может найти классы JavaFx, хотя они присутствуют в JDK

В настоящее время я работаю над приложением, использующим javafx для пользовательского интерфейса. Я использую java 9. Когда я вытащил из github, чтобы продолжить разработку на моем новом компьютере и скомпилировал, были ошибки компиляции во всех ссылках на классы javafx и только на классы javafx.

Я искал в jdk на внешних ресурсах, и пакет javafx действительно был там, где он должен был быть. Я также сделал новый проект, используя тот же jdk, и открыл окно javafx, которое отлично работало. Это говорит мне, что это проблема конкретного проекта, а не проблема системы.

Есть ли у кого-нибудь понимание этого? Спасибо.

РЕДАКТИРОВАТЬ Я использую сообщество Intellij Ed. Список ошибок был обширным, но вот несколько введите здесь описание изображения


person Java Noob    schedule 18.02.2018    source источник
comment
Вы (или ваша IDE) определили файл module-info.java в своем проекте Java 9? Что именно говорит ошибка?   -  person James_D    schedule 18.02.2018
comment
Я обновил вопрос с сообщениями об ошибках   -  person Java Noob    schedule 18.02.2018
comment
Так есть ли module-info.java в проекте?   -  person James_D    schedule 18.02.2018
comment
Да. на самом деле довольно много   -  person Java Noob    schedule 18.02.2018
comment
Вам понадобится requires javafx.controls ; в module-info.java для модуля, использующего JavaFX. (Возможно, вам понадобятся некоторые другие модули в дополнение.)   -  person James_D    schedule 18.02.2018
comment
Какие другие?   -  person Java Noob    schedule 18.02.2018
comment
Это зависит от того, что вы используете. Javadocs упорядочивает пакеты по модулям, поэтому вы можете посмотрите, какие пакеты находятся в каком модуле (в любом случае это довольно интуитивно). Если вам требуется модуль, вы также получаете его зависимости (например, требование javafx.controls неявно получает javafx.graphics и javafx.base).   -  person James_D    schedule 18.02.2018
comment
Это работало без ошибок компилятора! Спасибо. Если вы хотите, вы можете опубликовать ответ и плохо отметить его правильно   -  person Java Noob    schedule 18.02.2018


Ответы (1)


Ваша среда IDE могла настроить проект как "модульный" проект Java 9. В модульных проектах вы указываете, от каких других модулей зависит проект, и какие пакеты в ваших модулях должны быть доступны другим модулям. Хороший общий учебник по модулям находится на вики OpenJDK.

Если в корне пути к классам есть файл module-info.java, вам необходимо явно указать, что вашему модулю требуется доступ к соответствующим модулям JavaFX. Может быть достаточно просто добавить

requires javafx.controls ;

в этот файл: это даст вам доступ к javafx.controls модуль и модули, от которых он зависит (javafx.graphics и javafx.base). В зависимости от вашего проекта вам также может понадобиться

requires javafx.fxml ;

и/или

requires javafx.web ;

и т.п.

person James_D    schedule 18.02.2018