Java FXML文件导致应用程序无法打开
我在PluralSite上学习了这门课程,我一直在复制代码,但是他使用的是netbeans,而我使用的是eclipse,我不知道发生了什么。使用netbeans和ecplise使用fxml文件时有什么区别吗?如果有人能帮忙,我将不胜感激。如果您还需要更多信息,请务必提供帮助。我对javafx还不熟悉,所以要友善。fxml文件与其他文件位于同一个包中: 下面是我得到的异常,后面是应用程序代码,然后是fxml代码Java FXML文件导致应用程序无法打开,java,eclipse,javafx,fxml,Java,Eclipse,Javafx,Fxml,我在PluralSite上学习了这门课程,我一直在复制代码,但是他使用的是netbeans,而我使用的是eclipse,我不知道发生了什么。使用netbeans和ecplise使用fxml文件时有什么区别吗?如果有人能帮忙,我将不胜感激。如果您还需要更多信息,请务必提供帮助。我对javafx还不熟悉,所以要友善。fxml文件与其他文件位于同一个包中: 下面是我得到的异常,后面是应用程序代码,然后是fxml代码 Exception in Application start method java.
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$155(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 application.SimpleUI.start(SimpleUI.java:18)
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 application.SimpleUI
//first is my app
package application;
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class SimpleUI extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
HBox box = FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml"));
// VBox vBox = new VBox(new Label("This goes down"), new Button("Down"), new Button("Further Down"));
//
// box.getChildren().addAll(new Label("UserName"), new TextField(), new Button("Connect"), vBox);
Scene scene = new Scene(box);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
//this is my fxml code
import java.io.IOException;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class SimpleUI extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
HBox box = FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml"));
// VBox vBox = new VBox(new Label("This goes down"), new Button("Down"), new Button("Further Down"));
//
// box.getChildren().addAll(new Label("UserName"), new TextField(), new Button("Connect"), vBox);
Scene scene = new Scene(box);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import java.util.*?>
<?import java.scene.*?>
<?import java.scene.control.*?>
<?import java.scene.layout.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.control.TextField?>
<HBox>
<children>
<Label text= "UserName" />
<TextField />
<Button text= "Connect" />
</children>
</HBox>
应用程序启动方法中出现异常
java.lang.reflect.InvocationTargetException
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于com.sun.javafx.application.LaunchImpl.launchApplicationWithArgs(LaunchImpl.java:389)
位于com.sun.javafx.application.LaunchImpl.launchApplication(LaunchImpl.java:328)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(未知源)
在sun.reflect.DelegatingMethodAccessorImpl.invoke处(未知源)
位于java.lang.reflect.Method.invoke(未知源)
位于sun.launcher.launchelper$FXHelper.main(未知源)
原因:java.lang.RuntimeException:应用程序启动方法中的异常
位于com.sun.javafx.application.LaunchImpl.launchApplication1(LaunchImpl.java:917)
在com.sun.javafx.application.launchempl.lambda$launchApplication$155(launchempl.java:182)
位于java.lang.Thread.run(未知源)
原因:java.lang.NullPointerException:需要位置。
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3207)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3175)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3148)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3124)
在javafx.fxml.fxmloader.loadImpl(fxmloader.java:3104)
在javafx.fxml.fxmloader.load(fxmloader.java:3097)
位于application.SimpleUI.start(SimpleUI.java:18)
在com.sun.javafx.application.launchempl.lambda$launchApplication1$162(launchempl.java:863)
位于com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326)
位于com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295)
位于java.security.AccessController.doPrivileged(本机方法)
位于com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294)
位于com.sun.glass.ui.invokelateDispatcher$Future.run(invokelateDispatcher.java:95)
在com.sun.glass.ui.win.WinApplication.\u runLoop(本机方法)
位于com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191)
... 还有一个
运行application.SimpleUI时出现异常
//首先是我的应用程序
包装申请;
导入java.io.IOException;
导入javafx.application.application;
导入javafx.fxml.fxmloader;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextField;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.VBox;
导入javafx.stage.stage;
公共类SimpleUI扩展了应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
HBox box=fxmloader.load(getClass().getResource(“/hey/src/application/simpleui.fxml”); //VBox VBox=新的VBox(新标签(“此项下降”)、新按钮(“下降”)、新按钮(“进一步下降”); // //box.getChildren().addAll(新标签(“用户名”)、新文本字段()、新按钮(“连接”)、vBox); 场景=新场景(框); 初级阶段。场景(场景); primaryStage.show(); } 公共静态void main(字符串[]args){ 发射(args); } } //这是我的fxml代码 导入java.io.IOException; 导入javafx.application.application; 导入javafx.fxml.fxmloader; 导入javafx.scene.scene; 导入javafx.scene.control.Button; 导入javafx.scene.control.Label; 导入javafx.scene.control.TextField; 导入javafx.scene.layout.HBox; 导入javafx.scene.layout.VBox; 导入javafx.stage.stage; 公共类SimpleUI扩展了应用程序{ @凌驾 public void start(Stage primaryStage)引发异常{
HBox box=fxmloader.load(getClass().getResource(“/hey/src/application/simpleui.fxml”); //VBox VBox=新的VBox(新标签(“此项下降”)、新按钮(“下降”)、新按钮(“进一步下降”); // //box.getChildren().addAll(新标签(“用户名”)、新文本字段()、新按钮(“连接”)、vBox); 场景=新场景(框); 初级阶段。场景(场景); primaryStage.show(); } 公共静态void main(字符串[]args){ 发射(args); } }
修复:我修复了它,多亏了回答我问题的人我不确定这是否能解决您的问题,但我发现加载fxml文件的典型方式与您发布的代码之间的一个区别是加载程序中的路径:
HBox box = FXMLLoader.load(getClass().getResource("/hey/src/application/simpleui.fxml"));
我正常加载fxml,如下所示:
AnchorPane page = (AnchorPane) FXMLLoader.load(PreloadController.class.getResource("PreloaderGUI.fxml"));
并确保我的控制器
和fxml文件在同一个包中。我假设这些示例中的getResource
方法相同,但传递的String
路径不同。尝试将其更改为fxml文件的名称,然后查看它是否有效。i、 e如下:
HBox box = FXMLLoader.load(getClass().getResource("simpleui.fxml"));
运行代码时会发生什么?是的,我编辑了这个问题,这样你就可以看到异常,威尔查找这个问题时,我发现可能是fxml文件在错误的目录中,但它是n