Я создаю приложение JavaFX, созданное в Gradle, чтобы больше узнать о процессе создания приложений с графическим интерфейсом в Java. Столкновение на пути, с которым я столкнулся, включает доступ к файлу .mp4, который будет отображаться в окне просмотра мультимедиа. Предполагается, что это приложение будет запускаться через файл .jar, который я смог получить для работы с JavaFX 12 в целом, кроме ссылки на файл.
Я ссылался на это сообщение о переполнении стека , и его решение все еще возвращает нулевой указатель в моем проекте. Использование
Paths.get("src/main/resources/hellofx/Blend_W-gladRLvno7U.mp4").toUri().toString();
работает, но затем выдаст исключение Media в формате jar.
Структура файла выглядит следующим образом:
.
build.gradle
src
|─── main
|───java
|───hellofx
|─── HelloFX.java
|─── Launcher.java
|─── resources
|─── hellofx
|─── video.mp4
Файл сборки Gradle:
plugins {
id 'application'
id 'org.openjfx.javafxplugin' version '0.0.7'
}
repositories {
mavenCentral()
}
sourceSets {
main {
resources {
srcDirs = ["src/main/resources"]
includes = ["**/*.mp4"]
}
}
}
dependencies {
/* uncomment for cross-platform jar: */
runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:win"
// runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:linux"
// runtimeOnly "org.openjfx:javafx-graphics:$javafx.version:mac"
}
javafx {
version = "12.0.1"
modules = [ 'javafx.controls','javafx.fxml','javafx.media' ]
}
mainClassName = 'hellofx.HelloFX'
jar {
manifest {
attributes 'Main-Class': 'hellofx.Launcher'
}
from {
configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
}
}
И код Java:
public void start(Stage stage) {
//Parent root = FXMLLoader.load(getClass().getResource("scene.fxml"));
// Create and set the Scene.
Scene scene = new Scene(new Group(), 640, 360);
stage.setScene(scene);
//Returns Null Here (resource)
final URL resource = HelloFX.class.getResource("imgs/Blend_W-gladRLvno7U.mp4");
//Returns Null here (loc)
URL loc = this.getClass().getClassLoader().getResource("boop.txt");
System.out.println(loc);
String test = Paths.get("src/main/resources/hellofx/Blend_W-gladRLvno7U.mp4").toUri().toString();
System.out.println(test);
//Set up Media
Media media = new Media(test);
// Create the player and set to play automatically.
MediaPlayer mediaPlayer = new MediaPlayer(media);
mediaPlayer.setAutoPlay(true);
// Create the view and add it to the Scene.
MediaView mediaView = new MediaView(mediaPlayer);
((Group) scene.getRoot()).getChildren().add(mediaView);
stage.setTitle("JavaFX and Gradle");
stage.setScene(scene);
stage.show();
}