Сбой во время выполнения javafx

Привет, ребята, я разрабатываю приложение JavaFx на NetBeans 8.2 и Gluon Scene Builder. Первоначально программа дает мне вывод. После разработки я получил ошибки.

(Я перепробовал так много советов на этой платформе, я очищаю и собираю проект, я меняю местоположение файла fxml, я удаляю и повторно загружаю Scene Builder, я даже удаляю весь проект и записываю снова, чтобы увидеть, не забыл ли я что-то .Программа не содержит синтаксических ошибок.У меня и сервер и клиент работают.Ошибка возникает при запуске JavaFXMLApplication.java)

У меня наверное чего-то не хватает, а не неправильно.

Пользовательские переменные для HP

PATH:   C:\Users\HP\Envs\gui; C:\Users\HP\Desktop\jdk-11.0.2

Системные переменные

PATH:C:\Program Files\Python37\Scripts\;C:\Program 
Files\Python37\;C:\Users\HP\Envs\gui;C:\Program 
Files\Java\jdk1.8.0_111\bin;C:\Program Files\Java\jdk-11.0.2\bin

Мой fxml-файл

<AnchorPane id = "AnchorPane" prefHeight = "200" prefWidth = "320" 
xmlns:fx = "http://javafx.com/fxml/1" 
fx:controller = "javafxmlapplication.FXMLDocumentController">

Код :

package javafxmlapplication;

import java.util.Random;
import java.util.Timer;
import java.util.TimerTask;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

public class JavaFXMLApplication extends Application {

    @Override
    public void start(Stage stage) throws Exception {
        Parent root = FXMLLoader.load(getClass().getResource
    ("/src/javafxmlapplication/fxml/FXMLDocument.fxml"));

        Scene scene = new Scene(root,900,600);

        stage.setTitle("GUI");
        stage.setScene(scene);
        stage.show();

        Timer timer = new Timer();
        timer.scheduleAtFixedRate(new TimerTask(){
            @Override
            public void run(){
                Random rand = new Random();
                int myrand = rand.nextInt(15)+1;
                System.out.println((myrand+1)+"blue");
                root.getChildrenUnmodifiable().get(myrand).setStyle("-fx-background-color: #001f3f");
                    try{
                        Thread.sleep(1000);
                    }
                    catch(InterruptedException e){
                        //e.printStackTrace();
                        System.out.println(e);
                    }
                root.getChildrenUnmodifiable().get(myrand).setStyle("-fx-background-color : #FF4136");
            }
        },0,1000);
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}

В сообщении об ошибке система отмечает эту строку, но не выдает ошибок в номерах строк (я пытался добавить getClassLoader(), это дало мне ту же ошибку)

    Parent root = FXMLLoader.load(getClass().getResource
    ("/src/javafxmlapplication/fxml/FXMLDocument.fxml"));

Моя система имеет положительный вывод с кодами java и javac в cmd.

Executing C:\Users\HP\Documents\NetBeansProjects\JavaFXMLApplication\dist\run1672502609\JavaFXMLApplication.jar using platform C:\Program Files\Java\jdk1.8.0_111\jre/bin/java
Exception in Application start method
java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    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(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
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$155(LauncherImpl.java:182)
    at java.lang.Thread.run(Thread.java:745)
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 com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(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$148(WinApplication.java:191)
    ... 1 more
Exception running application javafxmlapplication.JavaFXMLApplication
Java Result: 1
Deleting directory C:\Users\HP\Documents\NetBeansProjects\JavaFXMLApplication\dist\run1672502609
jfxsa-run:
BUILD SUCCESSFUL (total time: 2 seconds)

Эта ошибка ниже

javafxmlapplication.JavaFXMLApplication.start(JavaFXMLApplication.java:25)

указывает на это

Parent root = FXMLLoader.load(getClass().getClassLoader().getResource("/src/javafxmlapplication/fxml/FXMLDocument.fxml"));

Сбой во время выполнения javafx

Сбой во время выполнения javafx

Любая помощь будет оценена, я в петле.

а) не изменять графический интерфейс из фонового потока. Если вы хотите реализовать обновление графического интерфейса из TimerTask, используйте Platform.runLater (обязательно исключите длительные операции, такие как Thread.sleep, из исполняемого файла; возможно, вам придется использовать Platform.runLater дважды). Parent root = FXMLLoader.load(getClass().getResource("/javafxmlapplication‌​/fxml/FXMLDocument.f‌​xml")); должно работать, если Netbeans не включает ресурс или я пропустил опечатку; если это не так, используйте браузер файлов Netbeans, чтобы заглянуть в созданную банку и проверить наличие ресурса (\dist\run***\JavaFXMLApplication.jar)

fabian 12.03.2019 11:27

нет run*** файла man есть просто: web-files file, .html, jar.jnpl

A.Toraman 13.03.2019 08:45

Над сообщением об ошибке написано Executing C:\Users\HP\Documents\NetBeansProjects\JavaFXMLApplication\d‌​ist\run1672502609\Ja‌​vaFXMLApplication.ja‌​r using .... Баночка должна быть где-то рядом...

fabian 13.03.2019 10:45

Да, есть файл jar, но я не знаю, что с этим файлом. Можешь уточнить?

A.Toraman 15.03.2019 09:33

В версии Netbeans, которую я использовал, вы могли открыть файл .jar и просмотреть его содержимое, используя вкладку Files рядом с Projects. Вы можете использовать эту функцию, чтобы убедиться, что fxml находится там, где вы хотите, или узнать, где он находится. (Имейте в виду, что .s, которые вы видите там, соответствуют /s в пути к ресурсу, и вам нужно добавить / в начале пути, чтобы getResource начать поиск в корне.). Таким образом, вы можете убедиться, что это не просто проблема с настройкой проекта, чтобы не включать файлы fxml в качестве ресурса. (Сначала проверьте другой путь.)

fabian 15.03.2019 10:53
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
5
453
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы используете неправильный путь для загрузки файла fxml. Используйте fxml/FXMLDocument.fxml или /javafxapplication/fxml/FXMLDocument.fxml.

Finds a resource with a given name. The rules for searching resources associated with a given class are implemented by the defining class loader of the class. This method delegates to this object's class loader. If this object was loaded by the bootstrap class loader, the method delegates to ClassLoader.getSystemResource(java.lang.String). Before delegation, an absolute resource name is constructed from the given resource name using this algorithm:

  • If the name begins with a '/' ('\u002f'), then the absolute name of the resource is the portion of the name following the '/'.
  • Otherwise, the absolute name is of the following form: modified_package_name/name

Из javadoc.

Итак, должно работать следующее:

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

Или:

Parent root = FXMLLoader.load(getClass().getResource("/javafxapplication/fxml/FXMLDocument.fxml"));

танки за совет, брат, но я тоже пробовал fxml/FXMLDocument.fxml часть автоматически создается системой, она тоже не работает, по этой причине я изменил путь. когда я компилирую без getClassLoader(). или пути, созданного из системы fxml/FXMLDocument.fxml , я получил это уведомление

A.Toraman 13.03.2019 08:34
Warning: From JDK7u25 the Codebase manifest attribute should be used to restrict JAR repurposing. Please set manifest.custom.codebase property to override the current default non-secure value '*'. Launching <fx:deploy> task from C:\Program Files\Java\jdk1.8.0_111\jre\..\lib\ant-javafx.jar No base JDK. Package will use system JRE. No base JDK. Package will use system JRE.
A.Toraman 13.03.2019 08:35

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