利用javafx制作类似坦克大战小游戏出现的问题(文件量不超过2Mb)

做了一个类似坦克大战的横板小游戏,但是出现了一些问题,这是其中之一

Exception in thread "JavaFX Application Thread" java.lang.IllegalStateException: Location is not set.
    at javafx.fxml@20-ea/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2548)
    at javafx.fxml@20-ea/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2523)
    at com.example.demo/com.example.demo.scene.GameOver.load(GameOver.java:16)
    at com.example.demo/com.example.demo.Director.gameOver(Director.java:45)
    at com.example.demo/com.example.demo.scene.GameScene.paint(GameScene.java:79)
    at com.example.demo/com.example.demo.scene.GameScene$Refresh.handle(GameScene.java:130)
    at javafx.graphics@20-ea/javafx.animation.AnimationTimer$AnimationTimerReceiver.lambda$handle$0(AnimationTimer.java:58)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:400)
    at javafx.graphics@20-ea/javafx.animation.AnimationTimer$AnimationTimerReceiver.handle(AnimationTimer.java:57)
    at javafx.graphics@20-ea/com.sun.scenario.animation.AbstractPrimaryTimer.timePulseImpl(AbstractPrimaryTimer.java:356)
    at javafx.graphics@20-ea/com.sun.scenario.animation.AbstractPrimaryTimer$MainLoop.run(AbstractPrimaryTimer.java:266)
    at javafx.graphics@20-ea/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:588)
    at javafx.graphics@20-ea/com.sun.javafx.tk.quantum.QuantumToolkit.pulse(QuantumToolkit.java:572)
    at javafx.graphics@20-ea/com.sun.javafx.tk.quantum.QuantumToolkit.pulseFromQueue(QuantumToolkit.java:565)
    at javafx.graphics@20-ea/com.sun.javafx.tk.quantum.QuantumToolkit.lambda$runToolkit$11(QuantumToolkit.java:352)
    at javafx.graphics@20-ea/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
    at javafx.graphics@20-ea/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at javafx.graphics@20-ea/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:184)
    at java.base/java.lang.Thread.run(Thread.java:1623)

Process finished with exit code 0


个人认为又是fxml的问题,但是用之前对module-info.java进行编辑的操作似乎不可行
利用IDEA进行javafx的编写
现阶段已经完成了角色设置场景布局运行逻辑通关/失败地图机制等游戏绝大部分的编写
可能后续还不止这些问题,感觉整个游戏内部程序没有大问题,但是总是运行到一半出现各种问题,可不可以能帮忙解决我这个游戏的BUG,让 游戏能正常运行,具体可以私信加我QQ

这个错误通常是由于FXML文件的位置无法被正确地解析而引起的。

  1. 确保FXML文件存在,并且在正确的位置。
  2. 确保您的FXML文件的命名和大小写与代码中的文件名一致。

java.lang.IllegalStateException: Location is not set的错误,是由于加载FXML文件不正确导致的,一般都是你的FXML路径写的不对导致的。
解决方法是,你可以将你的FXML文件与你的代码放在同一级目录下,然后使用如下方法加载FXML:


        FXMLLoader loader = new FXMLLoader();
        loader.setController(this);
        loader.setResources(Resources.getResources(null));
        try {
            node = loader.load(getClass().getResourceAsStream("project.fxml"));
        } catch (IOException ex) {
            throw new InternalError(ex);
        }

project.fxml文件和上述代码类在同一个文件夹下

从错误信息来看,问题出现在加载FXML文件时,提示"Location is not set."。这通常是由于无法找到或加载FXML文件导致的。以下是一些可能的解决方法:

确保FXML文件的路径和名称正确:检查FXML文件的路径和名称是否正确,并确保它们与你的代码中的路径和名称一致。请确保文件名的大小写也匹配。

检查FXML文件的位置:确认FXML文件实际存在于指定的路径中。可以使用绝对路径或相对路径来加载FXML文件。确保路径是正确的,并且文件在指定的位置。

检查FXML文件的编译方式:如果使用了Maven或Gradle等构建工具,请确保FXML文件在编译期间正确地复制到输出目录中。检查构建配置文件(如pom.xml或build.gradle)中的资源配置,确保FXML文件被正确处理。

使用正确的ClassLoader加载FXML文件:在加载FXML文件时,确保使用了正确的ClassLoader。可以尝试使用以下代码加载FXML文件:

java
Copy code
FXMLLoader loader = new FXMLLoader();
URL fxmlUrl = getClass().getResource("path/to/fxml.fxml");
loader.setLocation(fxmlUrl);
Parent root = loader.load();
这将使用当前类的ClassLoader加载FXML文件。

清除编译缓存:有时编译缓存可能导致问题,尝试清除IDE的编译缓存,并重新构建项目。

如果以上方法都没有解决问题,可以提供更多的代码和项目结构信息,以便更详细地分析问题并给出具体的解决方案。

表面看是fxml位置设置问题 Location is not set.,但是如果每次都是崩溃这个问题应该很好解决,至于其他问题最好将代码发出来,才能彻底找出所有问题。

看问题是fxml文件没有加载,这是自己写的还是网上的源码二次开发的。有一个不错的视频可以参考:https://www.bilibili.com/video/av251488137/?vd_source=e695c74d1e454dd6102a7ffaa5e3043d

问题是fxml文件没有加载,可能是路径问题,重新找到文件,然后再次构建一下(build)

答案引用自:GPT4
从给出的异常堆栈信息来看,问题出在FXML文件的位置没有被正确设置。这可能是因为FXML文件没有被正确放置在项目结构中,或者是加载FXML文件时使用的路径不正确。

首先,请确保FXML文件放置在正确的目录下。在标准的JavaFX项目结构中,FXML文件应该放置在src/main/resources目录下。如果你的项目结构不同,请将FXML文件放在与Java类相同的目录下。

其次,检查你在Java代码中加载FXML文件的方式。当加载FXML文件时,请使用以下方式:

Parent root = FXMLLoader.load(getClass().getResource("/path/to/your.fxml"));

请确保/path/to/your.fxml是从项目根目录(通常是src目录)开始的相对路径。例如,如果你的FXML文件位于src/main/resources/com/example/demo/scene/GameOver.fxml,那么应该使用以下代码加载它:

Parent root = FXMLLoader.load(getClass().getResource("/com/example/demo/scene/GameOver.fxml"));