Как запустить приложение Javafx с использованием fxml в коде VS без менеджера проекта? Я получил исключение java.lang.reJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как запустить приложение Javafx с использованием fxml в коде VS без менеджера проекта? Я получил исключение java.lang.re

Сообщение Anonymous »

Это первый сценарий проблемы:
Когда я запускаю эту программу. это пользовательский интерфейс javafx, использующий .fxml. он работает хорошо, когда я запускаю его с помощью mvn exec: через конфигурацию проекта maven. но не запускается в конфигурации .json по умолчанию (нажатие f5). однако нажатие f5 запускает простой пользовательский интерфейс Javafx без .fxml.
Я опубликую коды и ошибки для первого условия ниже.
сам проект звук. но в любом случае вот основной класс:

Код: Выделить всё

public class MediaAppPlayer extends Application {
@Override
public void start(Stage stage) {
try {
System.out.println("im here ....................");
// Load the FXMmnL file
FXMLLoader loader =
new FXMLLoader(getClass().getResource("/MediaPlayer.fxml"));
Parent root = loader.load();

// Set up the scene
Scene scene = new Scene(root, 500, 200);

// Bind the MediaView size to the scene size
Controller controller = loader.getController();
controller.bindMediaViewSize(scene);
controller.bindHBoxSize(scene);

// Set up the stage
stage.setTitle("Media Player");
stage.setScene(scene);
stage.show();

System.out.println("FXML file loaded sucessfully ....................");

} catch (Exception e) {
e.printStackTrace();
}
}

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

Код: Выделить всё

"version": "0.2.0",
"configurations": [
{
"type": "java",
"name": "Current File",
"request": "launch",
"mainClass": "${file}",
//create java run time component
"vmArgs": "--module-path \"C:/apps/javafx-sdk-21.0.5/lib\" --add-modules javafx.controls,javafx.fxml"

}
]
}
MediaPlayer.fxml Класс контроллера

Код: Выделить всё

public class Controller {

@FXML
private MediaView mediaView;
@FXML
private Slider volumeSlider;
@FXML
private Slider seekSlider;
@FXML
private Label currentTimeLabel;
@FXML
private Label totalTimeLabel;
@FXML
private HBox hBox;

private MediaManager mediaManager;

@FXML
public void initialize() {
hBox.setPadding(new Insets(0,0,10,0));
mediaManager = new MediaManager(mediaView, volumeSlider, seekSlider, currentTimeLabel, totalTimeLabel);
}
public void bindMediaViewSize(Scene scene) {
// Bind the MediaView size to the scene size
mediaView.fitWidthProperty().bind(scene.widthProperty());
mediaView.fitHeightProperty().bind(scene.heightProperty().subtract(60));  // Adjust height to account for controls

// Preserve the aspect ratio of the media
mediaView.setPreserveRatio(true);
}

// create a method to Bind the HBox and seeker slider size to the scene size
public void bindHBoxSize(Scene scene) {
// Bind the HBox and seeker slider size to the scene size
hBox.prefWidthProperty().bind(scene.widthProperty());
seekSlider.prefWidthProperty().bind(scene.widthProperty());
}

@FXML
private void handlePlay() {
mediaManager.play();
}

@FXML
private void handlePause() {
mediaManager.pause();
}

@FXML
private void handleStop() {
mediaManager.stop();
}

@FXML
private void handleOpenFile() {
FileChooser fileChooser = new FileChooser();
File file = fileChooser.showOpenDialog(null);
if (file != null) {
mediaManager.loadMedia(file);
}
}
}
pom.xml

Код: Выделить всё

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0

demo
demo
1.0-SNAPSHOT


21




org.openjfx
javafx-controls
21


org.openjfx
javafx-fxml
21


org.openjfx
javafx-media
21







org.apache.maven.plugins
maven-compiler-plugin
3.8.1

21
21




org.codehaus.mojo
exec-maven-plugin
3.0.0



java




demo.MediaAppPlayer







Ошибка

Код: Выделить всё

C:\Users\Kiran\OneDrive\Documents\VS Code\Media_Player\demo> cmd /C ""C:\Program Files\Java\jdk-21\bin\java.exe" -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=localhost:55228
@C:\Users\Kiran\AppData\Local\Temp\cp_4l8owl80fisy30v5w8p9jmqto.argfile demo.MediaAppPlayer "
im here ....................
Exception in Application start method
java.lang.reflect.InvocationTargetException
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:118)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at javafx.graphics@21.0.5/com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:464)
at javafx.graphics@21.0.5/com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:364)
at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
at java.base/java.lang.reflect.Method.invoke(Method.java:580)
at java.base/sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:1135)
Caused by: java.lang.RuntimeException: Exception in Application start method
at javafx.graphics@21.0.5/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:893)
at javafx.graphics@21.0.5/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:196)
at java.base/java.lang.Thread.run(Thread.java:1583)
Caused by: java.lang.IllegalAccessError: class com.sun.javafx.fxml.FXMLLoaderHelper (in unnamed module @0x3a6815b) 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 @0x3a6815b
at com.sun.javafx.fxml.FXMLLoaderHelper.(FXMLLoaderHelper.java:38)
at javafx.fxml.FXMLLoader.(FXMLLoader.java:2143)
at demo.MediaAppPlayer.start(MediaAppPlayer.java:19)
at javafx.graphics@21.0.5/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:839)
at javafx.graphics@21.0.5/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:483)
at javafx.graphics@21.0.5/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:456)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
at javafx.graphics@21.0.5/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:455)
at javafx.graphics@21.0.5/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at javafx.graphics@21.0.5/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics@21.0.5/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:185)
... 1 more
Exception running application demo.MediaAppPlayer
примечание: мой проект выполняется с помощью инструкций командной строки maven pom, т.е. mvn -exec:
но никогда не кажется для запуска конфигураций .json по умолчанию. при нажатии f5. и мне удалось таким образом запускать программы Javafx без fxml.
1-й сценарий: все, что я сделал в этом проекте, Java fx работает без fxml:
-добавлены зависимости с использованием maven.
-проверена совместимость версий java fx, jdk (они хорошие).
-добавлены правильные аргументы виртуальной машины и основной класс в файле .json
2-й сценарий: без структуры проекта и при создании программы javafx без fxml:
-я создал папки lib, src,bin.
-добавлены файлы .jar в lib.
-добавлены правые аргументы виртуальной машины, указывающие на эту библиотеку.
-(необязательно) добавлены пути к классам в файле .json. (не уверен, насколько это было правильно)
Оба этих условия не работают. не знаю, что я делаю не так. я хочу знать, как я могу запустить проект javafx на VScode вручную. который я попробовал и не сработал во втором условии. Я могу запустить его с помощью менеджера проектов. и в первом условии я использовал менеджер проектов maven для запуска программы javafx с файлом .fxml. он работал с командами mvn exec. но не с конфигурацией .json. имейте в виду, он работает, если это просто приложение Javafx без использования файла .fxml. что я здесь делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ager-i-got
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»