javaFX,抛出NullPointerException,需要位置

javaFX,抛出NullPointerException,需要位置,java,javafx,fxmlloader,Java,Javafx,Fxmlloader,我看到了其他答案,但没有任何帮助 (很抱歉,GUI新手只知道swing的基本知识) 这是主课 package application; import javafx.application.Application; import javafx.fxml.FXMLLoader; import javafx.scene.Parent; import javafx.scene.Scene; import javafx.stage.Stage; public class Main extends A

我看到了其他答案,但没有任何帮助

(很抱歉,GUI新手只知道swing的基本知识)

这是主课

package application;

import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;


public class Main extends Application {
@Override
public void start(Stage primaryStage) {
    try {
Parent root=FXMLLoader.load(getClass().getClassLoader().getResource("/Main.fxml"));

  Scene scene = new Scene(root,400,400);
        scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());
        primaryStage.setScene(scene);
        primaryStage.show();
    } 

    catch(Exception e) {
        e.printStackTrace();
        System.exit(0);

    }
}

public static void main(String[] args) {
    launch(args);
}
}
这是我要调用其方法的另一个类

package application;


import java.util.Random;
import javafx.event.ActionEvent;

import javafx.fxml.FXML;
import javafx.scene.control.Label;


public class MainController {

@FXML
private Label myMessage;
void generaterandom (ActionEvent event){
    Random rand=new Random();
    int myrand=rand.nextInt(50)+1;
    myMessage.setText(Integer.toString(myrand));
    System.out.println(Integer.toString(myrand));


}

}
如果需要,我将添加xml文件

这就是我得到的错误

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.Main.start(Main.java:14)
at     com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl    .java:863)
    at     com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:32    6)
    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)
getClass().getClassLoader().getResource(…)
将从相对于类路径的路径加载资源。由于您将FXML文件放置在
应用程序中
打包,因此需要:

Parent root=FXMLLoader.load(getClass().getClassLoader().getResource("application/Main.fxml"));
如果只使用
getClass().getResource(…)
,而不在路径前面加
/
,则它将从相对于当前类的路径加载。所以

Parent root=FXMLLoader.load(getClass().getResource("Main.fxml"));
也应该有效

确保FXML文件与
.class
文件一起导出到生成文件夹。

getClass().getClassLoader().getResource(…)
将从相对于类路径的路径加载资源。由于您将FXML文件放置在
应用程序中
打包,因此需要:

Parent root=FXMLLoader.load(getClass().getClassLoader().getResource("application/Main.fxml"));
如果只使用
getClass().getResource(…)
,而不在路径前面加
/
,则它将从相对于当前类的路径加载。所以

Parent root=FXMLLoader.load(getClass().getResource("Main.fxml"));
也应该有效


确保您的FXML文件与
.class
文件一起导出到构建文件夹。

如果我告诉您
getClassLoader
没有从源代码所在的包中读取,会怎么样?在搜索堆栈溢出后,我遇到了相同的错误,我遇到了添加getClassLoader()的问题几小时前,同样的代码运行良好!如果我告诉您,
getClassLoader
没有从源代码所在的包中读取内容,会怎么样?在搜索堆栈溢出之前,我遇到了相同的错误,在我找到添加getClassLoader()的解决方案后,几小时前,相同的代码工作正常!我没有在里面使用css文件。(很抱歉,GUI只知道swing的基础知识)而不是FXMLLoader.load(getClass().getClassLoader().getResource(“/Main.fxml”);尝试fxmloader.load(新文件(路径tofxmlfile.toURI().toul().toExternalForm());“新文件”按原样写吗?因为它要求导入java.io,这会创建另一个错误和指向xml文件“srx/application/main.fxml”的路径?我没有在其中使用css文件。(很抱歉,GUI只知道swing的基础知识)而不是FXMLLoader.load(getClass().getClassLoader().getResource(“/Main.fxml”);尝试fxmloader.load(新文件(路径tofxmlfile.toURI().toul().toExternalForm());“新文件”按原样写吗?因为它正在请求导入java.io,它会创建另一个错误和指向xml文件“srx/application/main.fxml”的路径?是的,它正在被导出,并且这两个解决方案都给出了相同的错误。我的机器可能有问题吗?javafx.fxml.LoadException:/Users/myname/Documents/workspace/javafx%20tesr/bin/application/Main.fxml:7但这不是“相同的错误”。你为什么说你犯了“同样的错误”?由于上一条错误消息报告找不到fxml文件,而新的错误消息说它在fxml文件的第7行发现了一个错误,因此我认为您可以放心地假设这修复了原始错误,否?与上一条错误不同,但新的错误相同。。我本来打算把这两件事都写在一条评论中,但由于错误被分开了。。那么新的错误现在在xml文件中了?这就是错误消息所说的,是的。在第7行。是的,它正在被导出,并且这两个解决方案都给出了相同的错误。我的机器可能有问题吗?javafx.fxml.LoadException:/Users/myname/Documents/workspace/javafx%20tesr/bin/application/Main.fxml:7但这不是“相同的错误”。你为什么说你犯了“同样的错误”?由于上一条错误消息报告找不到fxml文件,而新的错误消息说它在fxml文件的第7行发现了一个错误,因此我认为您可以放心地假设这修复了原始错误,否?与上一条错误不同,但新的错误相同。。我本来打算把这两件事都写在一条评论中,但由于错误被分开了。。那么新的错误现在在xml文件中了?这就是错误消息所说的,是的。在7号线。