java - 如何解决 JavaFX 项目中的 'Location is required'

标签 java javafx

我已在场景生成器中编辑了 FXML 文档 (View.fxml),并尝试在 Application.start 中调用它

查看.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.control.Button?>
<?import javafx.scene.control.Label?>
<?import javafx.scene.layout.AnchorPane?>


<AnchorPane prefHeight="300.0" prefWidth="400.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/11.0.1">
   <children>
      <Button layoutX="174.0" layoutY="150.0" mnemonicParsing="false" text="Button" />
      <Label layoutX="173.0" layoutY="103.0" text="CLick here" />
   </children>
</AnchorPane>

Main.java

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 stage) {
        try {
            Parent parent = FXMLLoader.load(getClass().getResource("gui/View.fxml"));
            Scene scene = new Scene(parent);
            stage.setScene(scene);
            stage.show();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}

我在 module-info.java 中插入了“require javafx.fxml”,它在控制台上显示了“java.lang.NullPointerException:需要位置”消息。

堆栈跟踪:

java.lang.NullPointerException: Location is required.
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3230)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3194)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3163)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3136)
    at javafx.fxml/javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3113)
    at javafx.fxml/javafx.fxml.FXMLLoader.load(FXMLLoader.java:3106)
    at javafx1/application.Main.start(Main.java:14)
    at javafx.graphics/com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$9(LauncherImpl.java:846)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runAndWait$12(PlatformImpl.java:455)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$10(PlatformImpl.java:428)
    at java.base/java.security.AccessController.doPrivileged(Native Method)
    at javafx.graphics/com.sun.javafx.application.PlatformImpl.lambda$runLater$11(PlatformImpl.java:427)
    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:174)
    at java.base/java.lang.Thread.run(Thread.java:834)

最佳答案

有必要删除 module-info.java 并添加参数 ''' --模块路径 --添加模块 '''

就我而言,我必须设置参数

''' --模块路径 C:\java-libs\openjfx-11.0.2_windows-x64_bin-sdk\javafx-sdk-11.0.2\lib --add-modules javafx.fxml,javafx.controls '''

向 JVM 通知编译代码所需的库路径和模块。

关于java - 如何解决 JavaFX 项目中的 'Location is required',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61351631/

相关文章:

java - 从sql数据库中的多个表中提取数据

JavaFX:工件仅显示空窗口

JavaFX 项目在导出到可运行的 .jar 时中断? FXMLLoader 相关吗?

java - 打印具有自动分页功能的 WebView/WebEngine

java - <EOF>创建 Derby 表时出现异常

Java EE servlet 作为 spring bean 代理

java - 无法识别 java.lang.ClassNotFoundException BaseDexClassLoader 的来源

java - 如何使用 JavaFX 桌面应用程序包请求 UAC 管理权限?

JavaFX.按条件更改 TreeItem 样式

java - 查找特定java类的文件路径