Есть ли способ отладки, почему мой исполняемый JAR-файл JavaFX-Project работает на моем компьютере, а не на других?(Используя jdk 1.8._051) - PullRequest
0 голосов
/ 28 мая 2019

Я экспортирую флягу проекта JavaFX2. Он работает нормально, но когда я запустил его на другой машине, будет classDefNotFoundExeption: 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 ]

3 голосов
/ 28 мая 2019

Другие компьютеры работают на установке 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);
}
0 голосов
/ 30 мая 2019

Я понял это: переменная User Path указывала на корзину JDK10.

Мы изменили Путь.Теперь он работает с "java -jar programm.jar", но не с "java programm.jar"

, но не с обычным щелчком по файлу.Но мы написали пакетный файл, который запускает приложение с помощью «java -jar», и он отлично работает.

Кто-нибудь может объяснить такое поведение?

0 голосов
/ 28 мая 2019

Для меня это выглядит как проблема с исполняемым файлом jar, если на этих машинах через IDE работает один и тот же код.Вы можете попробовать подключаемый модуль сборки maven, чтобы упаковать свой jar-файл.

Подключаемый модуль сборки 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>
0 голосов
/ 28 мая 2019

Вы можете получить 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/

...