Привет, ребята, я разрабатываю приложение 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"));
Любая помощь будет оценена, я в петле.
нет run*** файла man есть просто: web-files file, .html, jar.jnpl
Над сообщением об ошибке написано Executing C:\Users\HP\Documents\NetBeansProjects\JavaFXMLApplication\dist\run1672502609\JavaFXMLApplication.jar using .... Баночка должна быть где-то рядом...
Да, есть файл jar, но я не знаю, что с этим файлом. Можешь уточнить?
В версии Netbeans, которую я использовал, вы могли открыть файл .jar и просмотреть его содержимое, используя вкладку Files рядом с Projects. Вы можете использовать эту функцию, чтобы убедиться, что fxml находится там, где вы хотите, или узнать, где он находится. (Имейте в виду, что .s, которые вы видите там, соответствуют /s в пути к ресурсу, и вам нужно добавить / в начале пути, чтобы getResource начать поиск в корне.). Таким образом, вы можете убедиться, что это не просто проблема с настройкой проекта, чтобы не включать файлы fxml в качестве ресурса. (Сначала проверьте другой путь.)




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