Я следую этому руководству по настройке JavaFX. на машину Linux. Сначала я установил Java 11
asus@asus-pc:/usr/share/openjfx/lib$ java -version
openjdk version "11.0.3" 2019-04-16
OpenJDK Runtime Environment (build 11.0.3+7-Ubuntu-1ubuntu219.04.1)
OpenJDK 64-Bit Server VM (build 11.0.3+7-Ubuntu-1ubuntu219.04.1, mixed
mode, sharing)
asus@asus-pc:/usr/share/openjfx/lib$
Затем я установил OpenJFX с помощью команды sudo apt-get install openjfx
asus@asus-pc:/usr/share/openjfx/lib$ ls
javafx.base.jar javafx.graphics.jar javafx.swing.jar
javafx.controls.jar javafx.media.jar javafx.web.jar
javafx.fxml.jar javafx.properties src.zip
asus@asus-pc:/usr/share/openjfx/lib$
Потом создали библиотеку в Eclipse.
Затем я включил его в свой Java-проект. Я пытаюсь запустить этот код:
package se.danielmartensson.start;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application{
/*
* Start the start(Stage front)
*/
public static void main(String[] args) {
launch();
}
@Override
public void start(Stage front) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("/JUSBPlotter/src/se/danielmartensson/fxml/front.fxml"));
Scene scene = new Scene(root);
front.setScene(scene);
front.setTitle("Fracken");
front.show();
}
}
И я изменил конфигурацию запуска на:
Но когда я компилирую код. Я получаю эту ошибку:
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:363)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:566)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1051)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:900)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:195)
at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x1ff6d2c7) cannot access class com.sun.javafx.util.Utils (in module javafx.graphics) because module javafx.graphics does not export com.sun.javafx.util to unnamed module @0x1ff6d2c7
at com.sun.javafx.fxml.FXMLLoaderHelper.<clinit>(FXMLLoaderHelper.java:38)
at javafx.fxml.FXMLLoader.<clinit>(FXMLLoader.java:2056)
at se.danielmartensson.start.Main.start(Main.java:20)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.gtk.GtkApplication.lambda$runLoop$11(GtkApplication.java:277)
... 1 more
Exception running application se.danielmartensson.start.Main
Вопрос:
Есть кто где знает как решить эту ошибку? Раньше я устанавливал JavaFX, но на этот раз у меня это не сработает.
Изменить 1: если я изменю конфигурацию запуска на:
--module-path="/usr/share/openjfx/lib" --add-modules=javafx.controls,javafx.fxml
javafx.fxml
в аргументы вашей виртуальной машины. - person José Pereda   schedule 25.05.2019--module-path="/usr/share/openjfx/lib" --add-modules=javafx.controls,javafx.fxml
к моей конфигурации запуска, ошибки изменятся. Теперь я получаюCaused by: java.lang.NullPointerException: Location is required.
, потому что он не может найти файл .fxml, даже если я вставил его местоположение в код. - person Daniel Mårtensson   schedule 25.05.2019/JUSBPlotter/src/
из пути для загрузки файла FXML. - person José Pereda   schedule 25.05.2019/JUSBPlotter/src/
вызывает эту проблему? - person Daniel Mårtensson   schedule 25.05.2019src
к _2 _..., поскольку он начинает искать ваш файл именно оттуда ... - person José Pereda   schedule 25.05.2019/JUSBPlotter/src/
из пути к ресурсу, вы удалите на одну букву слишком много. Если вы указываете путь к ресурсу, начиная с корня пути к классам, путь должен начинаться с/
; следующая часть соответствует структуре пакета с заменой.
на/
, за исключением расширения файла. Я настоятельно рекомендую использовать модуль самостоятельно и добавлять правильные операторыrequires
вместо использования аргументов vm для добавления доступа к модулям. - person fabian   schedule 26.05.2019