jpackage erstellt und nicht gibt verschiedene Fehler aus, aber wenn ich es mit meiner anderen Anwendung versuche, funktioniert jpackage einwandfrei
package com.project;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.ProgressBar;
import javafx.scene.control.Slider;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Priority;
import javafx.scene.layout.StackPane;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;
import javafx.util.Duration;
import java.io.File;
import java.io.IOException;
public class HelloApplication extends Application {
MediaPlayer mediaPlayer;
MediaView mediaView;
Media media;
Label timeLabel;
File file;
private Duration startTime;
private Duration endTime;
@Override
public void start(Stage stage) throws IOException {
stage.setTitle("Hello!");
stage.setWidth(1000);
stage.setHeight(800);
VBox generalBox = new VBox();
HBox selecter = new HBox(10);
Button buttonSelect = new Button("Выбрать");
Label labelSelect = new Label("Не выбрано");
selecter.getChildren().addAll(buttonSelect, labelSelect);
VBox videoBox = new VBox();
videoBox.setStyle("-fx-border-color: black; -fx-border-width: 2px;");
VBox.setVgrow(videoBox, Priority.ALWAYS);
StackPane videos = new StackPane();
mediaView = new MediaView();
videos.getChildren().add(mediaView);
videoBox.getChildren().addAll(videos);
//--------------------------------
VBox controllerBox = new VBox();
controllerBox.setStyle("-fx-border-color: red; -fx-border-width: 2px;");
HBox startBox = new HBox(10);
startBox.setStyle("-fx-border-color: blue; -fx-border-width: 2px;");
Button start = new Button("►");
start.setDisable(true);
startBox.getChildren().addAll(start);
HBox timeLine = new HBox(10);
timeLine.setStyle("-fx-border-color: green; -fx-border-width: 2px;");
ProgressBar progressBar = new ProgressBar(0);
progressBar.setPrefWidth(500);
timeLabel = new Label("00:00:00");
timeLine.getChildren().addAll(progressBar, timeLabel);
HBox sliders = new HBox();
sliders.setStyle("-fx-border-color: yellow; -fx-border-width: 2px;");
Button leftOne = new Button("←");
leftOne.setDisable(true);
Button leftFive = new Button("←←");
leftFive.setDisable(true);
Slider slider = new Slider(0, 100, 0);
slider.setPrefWidth(500);
slider.setDisable(true);
Button rightOne = new Button("→");
rightOne.setDisable(true);
Button rightFive = new Button("→→");
rightFive.setDisable(true);
sliders.getChildren().addAll(leftFive, leftOne, slider, rightOne, rightFive);
HBox setterButton = new HBox(10);
setterButton.setStyle("-fx-border-color: black; -fx-border-width: 2px;");
Button startButton = new Button("Начало");
startButton.setDisable(true);
Label startLabel = new Label("00:00:00");
Button endButton = new Button("Конец");
endButton.setDisable(true);
Label endLabel = new Label("00:00:00");
Button pruning = new Button("Обрезать");
pruning.setDisable(true);
setterButton.getChildren().addAll(startButton, startLabel, endButton, endLabel, pruning);
controllerBox.getChildren().addAll(startBox, timeLine, sliders, setterButton);
//----------------------------
generalBox.getChildren().addAll(selecter, videoBox, controllerBox);
Scene scene = new Scene(generalBox);
stage.setScene(scene);
stage.show();
//Обработчик кнопок
buttonSelect.setOnAction(e -> {
FileChooser chooser = new FileChooser();
chooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("Video Files", "*.mp4", "*.avi", "*.mkv"));
file = chooser.showOpenDialog(stage);
if(file != null){
if(mediaPlayer != null){
mediaPlayer.dispose();
}
media = new Media(file.toURI().toString());
mediaPlayer = new MediaPlayer(media);
TimerVideo videoTimer = new TimerVideo(mediaPlayer, timeLabel);
mediaPlayer.currentTimeProperty().addListener((observable, oldValue, newValue) -> {
Duration totalDuration = mediaPlayer.getTotalDuration();
if (totalDuration != null && !totalDuration.isUnknown()) {
double progress = newValue.toSeconds() / totalDuration.toSeconds();
progressBar.setProgress(progress);
}
});
mediaView.setMediaPlayer(mediaPlayer);
mediaView.setFitHeight(600);
mediaView.setFitWidth(300);
mediaView.setPreserveRatio(true);
labelSelect.setText("Выбрано "+ file.getAbsolutePath());
start.setDisable(false);
slider.setDisable(false);
startButton.setDisable(false);
endButton.setDisable(false);
pruning.setDisable(false);
rightFive.setDisable(false);
rightOne.setDisable(false);
leftFive.setDisable(false);
leftOne.setDisable(false);
mediaPlayer.currentTimeProperty().addListener((observable, oldValue, newValue) -> {
if (!slider.isValueChanging()) { // Проверяем, что пользователь не взаимодействует с слайдером
Duration totalDuration = mediaPlayer.getTotalDuration();
if (totalDuration != null && !totalDuration.isUnknown()) {
double progress = newValue.toSeconds() / totalDuration.toSeconds();
slider.setValue(progress * 100); // Обновляем слайдер (в процентах)
}
}
slider.valueChangingProperty().addListener((obs, wasChanging, isChanging) -> {
if (!isChanging) { // Когда пользователь отпускает слайдер
Duration totalDuration = mediaPlayer.getTotalDuration();
if (totalDuration != null) {
double newTime = slider.getValue() / 100 * totalDuration.toSeconds();
mediaPlayer.seek(Duration.seconds(newTime)); // Устанавливаем новую позицию воспроизведения
}
}
});
});
}
});
start.setOnAction(e -> {
if(mediaPlayer.getStatus() == MediaPlayer.Status.PLAYING){
mediaPlayer.pause();
start.setText("❚❚");
}else{
mediaPlayer.play();
start.setText("►");
}
});
startButton.setOnAction(e ->{
if(mediaPlayer != null){
startTime = mediaPlayer.getCurrentTime();
startLabel.setText(formatDuration(startTime));
}
});
endButton.setOnAction(e -> {
if(mediaPlayer != null){
endTime = mediaPlayer.getCurrentTime();
endLabel.setText(formatDuration(endTime));
}
});
leftOne.setOnAction(e ->{
double value = slider.getValue();
Duration totalDuration = mediaPlayer.getTotalDuration();
if(totalDuration != null) {
slider.setValue(value - 1);
double timeValue = slider.getValue() / 100 * totalDuration.toSeconds();
mediaPlayer.seek(Duration.seconds(timeValue));
}
});
leftFive.setOnAction(e ->{
double value = slider.getValue();
Duration totalDuration = mediaPlayer.getTotalDuration();
if(totalDuration != null) {
slider.setValue(value - 5);
double timeValue = slider.getValue() / 100 * totalDuration.toSeconds();
mediaPlayer.seek(Duration.seconds(timeValue));
}
});
rightFive.setOnAction(e ->{
double value = slider.getValue();
Duration totalDuration = mediaPlayer.getTotalDuration();
if(totalDuration != null) {
slider.setValue(value + 5);
double timeValue = slider.getValue() / 100 * totalDuration.toSeconds();
mediaPlayer.seek(Duration.seconds(timeValue));
}
});
rightOne.setOnAction(e ->{
double value = slider.getValue();
Duration totalDuration = mediaPlayer.getTotalDuration();
if(totalDuration != null) {
slider.setValue(value + 1);
double timeValue = slider.getValue() / 100 * totalDuration.toSeconds();
mediaPlayer.seek(Duration.seconds(timeValue));
}
});
pruning.setOnAction(e -> {
try {
// Получаем startTime и endTime как Duration
double startInSeconds = startTime.toMillis() / 1000.0; // Преобразуем миллисекунды в секунды
double endInSeconds = endTime.toMillis() / 1000.0; // Преобразуем миллисекунды в секунды
// Преобразуем путь к файлу в URI и генерируем новое имя для обрезанного видео
String name = file.toURI().toString();
String newName = Randoms.Randomizer();
// Обрезаем видео с помощью VideoEditor
VideoEditor.trimVideo(name, newName, startInSeconds, endInSeconds);
} catch (IOException ex) {
ex.printStackTrace();
}
});
}
public static void main(String[] args) {
launch();
}
private String formatDuration(Duration duration) {
long minutes = (long) duration.toMinutes();
long seconds = (long) duration.toSeconds() % 60;
long milliseconds = (long) (duration.toMillis() % 1000);
// Форматируем строку в нужный формат: MM:SS:MS
return String.format("%02d:%02d:%03d", minutes, seconds, milliseconds);
}
}
type here modul-info
module com.project {
requires javafx.controls;
requires javafx.fxml;
requires javafx.media;
requires org.controlsfx.controls;
requires org.kordamp.bootstrapfx.core;
opens com.project to javafx.fxml;
exports com.project;
}
type here pom.xml
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com
Project
1.0-SNAPSHOT
Project
UTF-8
5.10.2
org.openjfx
javafx-controls
17.0.6
org.openjfx
javafx-media
17.0.6
org.openjfx
javafx-fxml
17.0.6
org.controlsfx
controlsfx
11.2.1
org.kordamp.bootstrapfx
bootstrapfx-core
0.4.0
org.junit.jupiter
junit-jupiter-api
${junit.version}
test
org.junit.jupiter
junit-jupiter-engine
${junit.version}
test
org.apache.maven.plugins
maven-compiler-plugin
3.13.0
17
17
org.openjfx
javafx-maven-plugin
0.0.8
default-cli
com.project/com.project.HelloApplication
app
app
app
true
true
true
java.io.IOException: Command [light.exe, -nologo, -spdb, -ext, WixUtilExtension, -out, C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\images\win-exe.image\VideoSaver-0.0.1.msi, -sice:ICE27, -loc, C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\config\MsiInstallerStrings_en.wxl, -cultures:en-us, C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\wixobj\main.wixobj, C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\wixobj\bundle.wixobj, C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\wixobj\ui.wixobj] in C:\Users\valis\AppData\Local\Temp\jdk.jpackage5771419907643998597\images\win-msi.image\VideoSaver exited with 297
Zusätzlich: Ich habe gerade irgendwie das Anwendungsinstallationsprogramm zum Laufen gebracht und zusammengebaut. (Obwohl ich absolut nichts geändert habe. Aber mir ist ein Fehler aufgefallen und ich musste die Anwendung neu erstellen und wieder bekomme ich diesen Fehler
codeIch habe verschiedene Versionen von JDK 14, 17 ausprobiert ( verschiedene Versionen auch)Wahrscheinlich liegt das Problem speziell in meinem Code