Java Fx文件位置异常
你好,我是JavaFx新手。我已经为我的JavaFx项目创建了一个Maven项目。 我正在尝试加载第一个.fxml文件,但是遇到了上述异常。我试过几件事,但总是兜圈子。获取以下异常:Java Fx文件位置异常,java,maven,javafx,Java,Maven,Javafx,你好,我是JavaFx新手。我已经为我的JavaFx项目创建了一个Maven项目。 我正在尝试加载第一个.fxml文件,但是遇到了上述异常。我试过几件事,但总是兜圈子。获取以下异常: java.lang.NullPointerException:需要位置。 控制器类 public class HomeScreenController extends Application { @FXML private Button ProjectProp; @FXML pr
java.lang.NullPointerException:需要位置。
控制器类
public class HomeScreenController extends Application {
@FXML
private Button ProjectProp;
@FXML
private Button Tech;
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("homescreen.fxml"));
Scene scene = new Scene(root);
stage.setScene(scene);
stage.show();
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
.fxml文件
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Button?>
<?import javafx.scene.layout.AnchorPane?>
<AnchorPane maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/11.0.1" xmlns:fx="http://javafx.com/fxml/1" fx:controller="com.thales.HomeScreenController">
<children>
<Button fx:id="projectProp" layoutX="46.0" layoutY="38.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="145.0" text="Project Properties" />
<Button fx:id="tech" layoutX="46.0" layoutY="114.0" mnemonicParsing="false" prefHeight="50.0" prefWidth="145.0" text="Technologies" />
</children>
</AnchorPane>
您是否尝试在文件名(包括文件结构)中添加正斜杠
Parent root = FXMLLoader.load(getClass().getResource("/com/thales/homescreen.fxml"));
我不太熟悉您正在使用的IDE,但我认为它可以在参考资料中找到,但如果您嵌套文件,则需要指定在何处找到它。另外,看看我自己的项目,我总是有一个属性文件,它与fxml位于同一个文件夹中。例如,我的上一个项目是这样的
private static final String LAYOUT\u RESOURCE=“imsort.fxml”;
私有静态最终字符串资源\u BUNDLE=“strings”;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
ClassLoader ClassLoader=getClass().getClassLoader();
ResourceBundle=ResourceBundle.getBundle(资源\u bundle);
FXMLLoader FXMLLoader=新的FXMLLoader(classLoader.getResource(布局资源),bundle);
父根=fxmloader.load();
场景=新场景(根);
stage.setresizeable(true);
舞台场景;
stage.sizeToScene();
stage.show();
设置阶段(阶段、根);
}
如果您没有任何属性,可以创建一个名为“strings.properties”的空文件,将其放置在与.fxml相同的位置。资源的Java代码和路径看起来是正确的,因此您的安装和/或构建过程有问题
从您的屏幕截图来看,您似乎已经在src/main/resources
源文件夹中创建了一个名为org.thales
的文件夹。这里需要一个名为org.thales
的包。您可以使用文件浏览器并查看构建文件夹(在Maven中默认情况下,该文件夹将是target/classes
)。在那里你应该有一个org
目录,以及thales
子目录,其中应该包含你的所有类文件和FXML文件。我怀疑您会发现一个org.thales
目录中有FXML文件
在eclipse的左窗格中右键单击src/main/resources
,选择“新建”,然后选择“包”,并输入org.thales
作为包名。然后将FXML文件(您可以在左侧eclipse窗格中拖放它们)移动到包中。这应该可以解决问题。(您还可以通过删除org.thales
文件夹进行清理,该文件夹现在应该是空的。)作为旁白,将同一类用作应用程序
子类和控制器是一个坏主意。我很确定这不会引起问题,但它会造成很多混乱:您最终会得到该类的两个实例,而@FXML
-注入的字段只在其中一个字段中初始化。非常感谢!在您第一次将其作为标准Java项目发表评论之后,我就直接对其进行了测试。我是配置Maven的新手,所以这对我有很大帮助!它现在起作用了:)