0

我已经阅读了有关 stackoverflow 的所有问题,但我没有使用过有效的东西。我有一个基本的 fxml,它是在使用 Java 1.7 时使用 JavaFX Scene Builder 1.1 构建的。

我只想加载文件......但一切似乎都指向一个空位置,这意味着它找不到它。我不明白为什么。我有 18 次尝试/捕获来显示 18 种不同的可能性,但它无法找到它。这些示例是从一些 stackoverflow 问题中提取的,作为“有效接受的答案”。我在这里错过了什么?一切都可以编译,所以我不认为我缺少 SDK 或其他主要内容。

日志打印 1 到 18,在第 18 次尝试/捕获时出现 NullPointerException,表示 NullPointer... location is required。

在 imgur.com 上查看帖子

在此处输入图像描述

import javafx.application.Application;
import javafx.fxml.FXMLLoader;

import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;

import java.net.URL;


public class OptionsToggleMenu  extends Application {

public void launchTheThing(String... args){     //runs this on the Main application's main method.
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    int failures = 0;

    try{
        Parent root1 = new Parent() {
        };
        try{
              root1 = FXMLLoader.load(getClass().getResource("AdventureLibrary/test.fxml"));
            System.out.println(null == root1);
        }
        catch(Exception e){
            System.out.println(1);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("AdventureLibrary/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(2);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("bin/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(3);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("bin/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(4);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(5);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(6);
            failures++;
        }
        try{
              root1 = FXMLLoader.load(getClass().getResource("/AdventureLibrary/test.fxml"));
            System.out.println(null == root1);
        }
        catch(Exception e){
            System.out.println(7);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("/AdventureLibrary/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(8);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("/bin/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(9);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("/bin/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(10);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(11);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(12);
            failures++;
        }
        try{
              root1 = FXMLLoader.load(getClass().getResource("/resources/test.fxml"));
            System.out.println(null == root1);
        }
        catch(Exception e){
            System.out.println(13);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("/resources/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(14);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("resources/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(15);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("resources/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(16);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getResource("test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(17);
            failures++;
        }

        try{
              Parent root2 = FXMLLoader.load(getClass().getClassLoader().getResource("/test.fxml"));
            System.out.println(null == root2);
        }
        catch(Exception e){
            System.out.println(18);
            System.out.println(e);
            failures++;
        }


        System.out.println("There are this many failures: " + failures+"/18");

    Scene scene = new Scene(root1, 300, 275);

    primaryStage.setTitle("FXML Welcome");
    primaryStage.setScene(scene);
    primaryStage.show();
    }
    catch(Exception e)
    {
        System.out.println("XX"+e);
    }
}


}

编辑:添加调用 resources/fxml/test.fxml 的代码也不成功。 在此处输入图像描述

4

2 回答 2

2

为了完全解决这个问题,我查看了 James_D 的帖子并检查了 IDEA 的构建到生产的工作方式。除非您告诉它,否则它不会保存文件。编译器会将几个默认文件带入生产环境,例如 .property 和 .jpg 文件……但不是以 .fxml 结尾的 JavaFX 文件。

我遵循了这个:https://www.jetbrains.com/idea/help/resource-files.html 一旦我在编译行的末尾添加 ?*.fxml ,我就能够获得一个构建来部署我的 fxml 文件接受的文件。

多谢你们。

于 2016-02-25T15:49:32.063 回答
0

我认为您需要更改此行:

root1 = FXMLLoader.load(getClass().getResource("AdventureLibrary/test.fxml"));

我认为这不是您的 FXML 的正确路径。在我的项目中,我们使用

resources
    ->fxml
        text.fxml

我们像这样加载它:

FXMLLoader loader = new FXMLLoader();
loader.load(Class.class.getClassLoader().getResource("fxml/text.fxml").openStream());
于 2016-02-25T14:58:08.577 回答