Есть ли способ отладки, почему мой исполняемый 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>`

добавьте это к вашей зависимости.

https://openjfx.io/

Другие вопросы по тегам