Код работает нормально, тогда после maven установки, есть ошибки как в jar, так и в IDE - PullRequest
0 голосов
/ 21 ноября 2018

Исключение в методе запуска приложения:

Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:389)
    at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:328)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:917)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$154(LauncherImpl.java:182)
    at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.NullPointerException: Location is required.
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3207)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124)
    at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104)
    at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097)
    at edu.citytech.view.EmployeeMain.start(EmployeeMain.java:16)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$161(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$174(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$172(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$173(PlatformImpl.java:294)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$147(WinApplication.java:177)
    ... 1 more
Exception running application edu.citytech.view.EmployeeMain

Вот класс с методом main EmployeeMain.java:

package edu.citytech.view;

import edu.citytech.utitlity.GlobalVariables;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

public class EmployeeMain extends Application {

    @Override
    public void start(Stage primaryStage) throws Exception {

        Parent root = FXMLLoader.load(getClass().getResource("EmployeeView.fxml")); 

        primaryStage.setScene(new Scene(root));
        primaryStage.show();

        // * new *
        primaryStage.setResizable(false);   
        primaryStage.setTitle("Employee List");

        primaryStage.getIcons().add(new Image(EmployeeMain.class.getResourceAsStream("People.jpg")));
    }

    public static void main(String[] args) {    

        if (args.length > 0) {
            GlobalVariables.portNumber = (Integer.parseInt(args[0]));           
        }       

        launch(args);
    }
}

И что исправляет это добавление пробела к любому изфайлы и сохраните его, затем перезапустите Eclipse IDE и снова запустите его из IDE.Что мешает, так это когда я запускаю mvn clean и mvn install, а затем запускаю созданный файл jar.У всех в моем классе есть эта проблема, и учитель не знает, как ее решить.Это просто работает для некоторых людей, и это не для других.Однако на этот раз это не работает, что бы я ни пытался.Работает только в IDE, пока я не использую maven для создания баночки.Тогда это не будет работать, пока я не изменю и не сохраню файл, а затем не перезапущу IDE.Все названо правильно, и это просто работает и не работает в случайном порядке.Это проблема IDE или проблема проекта?

Что я могу сделать, чтобы я мог создать JAR-файл, который работает при его запуске?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

Я понял, как заставить его работать.Действительно раздражает, но действительно просто.Я напишу это здесь для всех, кто, вероятно, находит эту страницу через поисковик.

  1. Щелкните правой кнопкой мыши папку проекта> Maven> Обновить проект ...

  2. Обновить выбранный проект

  3. Щелкните правой кнопкой мыши папку проекта и запустите на локальном терминале

  4. mvn install

И НЕ ДЕЛАЙТЕ МВН ЧИСТЫЙ

0 голосов
/ 21 ноября 2018

Возможны 3 проблемы

  1. Похоже, вам нужна среда IDE для перекомпиляции кода, чтобы он снова работал и в Eclipse?не знаю, почему это будет на самом деле, если только не используется java-версия ...

eclipse обычно перестраивается при любых изменениях (например, добавляется место в файле)

является вашей IDE затмения иmaven compile использует ту же версию java?

удалите каталог ./target и

добавьте это в maven pom.xml, чтобы убедиться, что вы используете правильную версию java (например, для java1.8):

    <properties>
         <maven.compiler.source>1.8</maven.compiler.source>
         <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
включает файл в сборку jar

Также копия вашего EmployeeView.fxml должна находиться в src / main / resources, и файл не попадет в ваш файл jar, если вы не включите:

             <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <includes>
                        <include>**/*</include>
                    </includes>
                </resource>
            </resources>
Этот код не будет работать в файле jar во время выполнения, посмотрите эти ответы: Как правильно ссылаться на файл ресурса для JAR и отладки?

и обновить ваш кодиспользовать getREsourceAsStream, например, вот метод, который я использую:

public void load(String resource, HashSet<String> hashset) {
        ClassLoader classloader = Thread.currentThread().getContextClassLoader();
        InputStream is_awl = classloader.getResourceAsStream(resource);

        BufferedReader reader = new BufferedReader(new InputStreamReader(is_awl));
        String line;
        try {
            while ((line = reader.readLine()) != null) {
                hashset.add(line.trim());
            }

        } catch (IOException e) {
            System.err.println("LexicalFeatures can't initialise:"
                    + resource + " hashset: "+ e.getMessage());
            e.printStackTrace();
        }

    }
...