我知道,这里有很多类似的问题和类似的问题,但看了很多帖子后,我无法简单地解决这个问题。在Compiler>Resource Patterns下,我已经放入了这个字符串“*.fxml”。此外,我已经将resources文件夹标记为resources根。
这里可以看到我的项目结构:
这是我的MainView.java类。
package dataParser.View;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class MainView extends Application {
private Stage primaryStage;
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
this.primaryStage = primaryStage;
FXMLLoader loader = new FXMLLoader();
System.out.println(this.getClass().getResource("/MainView.fxml"));
loader.setLocation(getClass().getResource("/MainView.fxml"));
MainViewController mainViewController = new MainViewController();
mainViewController.setMainApp(this);
loader.setController(mainViewController);
Parent layout = loader.load();
Scene scene = new Scene(layout);
primaryStage.setScene(scene);
primaryStage.show();
}
Stage getPrimaryStage() {
return primaryStage;
}
}
Exception in thread "main" java.lang.RuntimeException: Exception in Application start method
at javafx.graphics/com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:973)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication$2(LauncherImpl.java:198)
at java.base/java.lang.Thread.run(Thread.java:844)
Caused by: java.lang.IllegalStateException: Location is not set.
at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2459)
at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:2435)
at dataParser.View.MainView.start(MainView.java:29)
at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:919)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$11(PlatformImpl.java:449)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$9(PlatformImpl.java:418)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:417)
at javafx.graphics/com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:96)
at javafx.graphics/com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at javafx.graphics/com.sun.glass.ui.win.WinApplication.lambda$runLoop$3(WinApplication.java:175)
... 1 more
过了一段时间,我找到了一个解决这个棘手问题的方法,我将尽力在这里解释它。
首先,我已经设置了我的项目结构(文件>项目结构...)以适当的方式定义源文件夹和资源文件夹,以便IntelliJ Idea能够找到它们。此外,我还检查了我的资源文件是否正确地放入了“build”和“out”文件夹(Gradle和IntelliJ在构建过程中使用了它们):我还通过将我的“filesettingscompiler”设置在许多堆栈溢出答案中精确定位来实现了这一点。
最后,我在调用我的资源文件时使用了这个结构:
FXMLLoader loader = new FXMLLoader();
System.out.println(MainView.class.getResource("/fxml/MainView.fxml"));
loader.setLocation(MainView.class.getResource("/fxml/MainView.fxml"));
我想指出我的“fxml”文件夹的根文件夹是“resources”。
问题内容: 我正在使用以下命令获取此特定文件的URL,但它返回null。是否有人对问题有任何建议或其他替代方法? 问题答案: 对于那些使用Intellij Idea的用户:检查设置->编译器->资源模式。 该设置包含所有应解释为资源的扩展。如果扩展不符合此处的任何模式,则class.getResource将为使用此扩展的资源返回null。
问题内容: 我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。 它由属于“ login.fxml”的控制器类“ Login.java”组成,其中通过称为“ registrationClicked(ActionEvent event)”的方法加载了FXML文件“ registrierung.fxml”: 现在,我想通过根节点vboxRoot引用控制器类“ Registri
我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。 它由属于login.fxml的控制器类Login.java组成,其中FXML文件registrierung.fxml通过名为注册点击(动作事件)的方法加载: 现在我想参考一下“registrierung”的阶段。fxml“在控制器类”注册表中。java“通过根节点vboxRoot: 但是,“getScene()”总是导
代码: 这里的问题是:lowEndDate和highEndDate总是为null,不管输入是什么。
问题内容: 我创建了一个简单的JavaFX应用程序,该应用程序在TextField中接收来自用户的输入。我将来自SceneBuilder的KeyTyped事件附加到控制器。我的函数如下所示: 当我键入回车键时,此功能始终打印出UNDEFINED。有想法该怎么解决这个吗?我键入的其他字母似乎也有相同的问题。 问题答案: 是一个特殊事件。它没有但已设置。 请参见字母“ a”的示例: 和javadoc:
DatePicker在更改日期之后没有更新。 另外,我尝试了在没有侦听器的情况下获取数据,比如: 也许有人有类似的问题,并找到了解决办法? 编辑1: