Когда я запускаю эту программу. это пользовательский интерфейс 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);
}
}
Код: Выделить всё
"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"
}
]
}
Код: Выделить всё
Код: Выделить всё
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);
}
}
}
Код: Выделить всё
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
но никогда не кажется для запуска конфигураций .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
Мобильная версия