Есть ли способ отладки, почему мой исполняемый JAR-файл JavaFX-Project работает на моем компьютере, а не на других? (Используя jdk 1.8._051)
Я экспортирую флягу проекта JavaFX2. Он работает нормально, но когда я запускаю его на другой машине, будет класс DefNotFoundExeption: javafx.application.Application
Любые намеки, как решить эту проблему?
Это мой манифест:
Class-Path: .
Main-Class: proj.view.Launcher
Я также запрограммировал Launcher, который запускает Swing GUI на случай, если JavaFX не найден.
Вот мой класс Launcher
public class Launcher {
public static void main(String[] args) {
try {
Class c = javafx.application.Application.class;
proj.main.App.main(args);
}catch (NoClassDefFoundError e) {
String[] t = {"Swing Backup","Application start Error"};
MainFrame.remote(t);
}
}
}
4 ответа
Другие компьютеры работают на установке Java, которая не включает JavaFX. Он работает на вашем компьютере, потому что у вас установлен JavaFX.
Чтобы проверить, если javafx.application.Application
доступно, нужно использовать отражение, т.е.
boolean hasJavaFX;
try {
Class.forName("javafx.application.Application");
hasJavaFX = true;
} catch (ClassNotFoundException e) {
hasJavaFX = false;
}
if (hasJavaFX) {
MainFrame.remote(new String[] {"Swing Backup","Application start Error"});
} else {
proj.main.App.main(args);
}
Я понял это: переменная User Path указывала на корзину JDK10.
Мы изменили Путь. Теперь он работает с "java -jar programm.jar", но не с "java programm.jar"
но не с обычным нажатием на файл. Но мы написали пакетный файл, который запускает приложение с помощью "java -jar", и он отлично работает.
У кого-нибудь есть объяснение этому поведению?
Для меня это выглядит как проблема с запущенным jar, если на этих машинах через IDE работает один и тот же код. Вы можете попробовать сборочный плагин maven, чтобы упаковать свою банку.
Плагин сборки Apache Maven позволяет пользователям объединять выходные данные проекта вместе с его зависимостями, модулями, документацией сайта и другими файлами в один работающий пакет.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
<configuration>
<archive>
<manifest>
<mainClass>
package.your_main_class
</mainClass>
</manifest>
</archive>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
</configuration>
</execution>
</executions>
</plugin>
Вы можете получить classDefNotFoundExeption: javafx.application.Application, когда вы работаете на компьютере с jdk выше 11.
oracle удалил javaFX форму JDK 11, следовательно, необходимо обеспечить зависимость от модуля javafx-controls.
`<dependency>
<groupId>org.openjfx</groupId>
<artifactId>javafx-controls</artifactId>
<version>12-ea+9</version>
</dependency>`
добавьте это к вашей зависимости.