当前位置: 首页 > 知识库问答 >
问题:

JavaFX ChoiceBox NullPointerException无论我做什么

燕烨
2023-03-14

我正在尝试向我用SceneBuilder创建的FXML文件中存在的ChoiceBox添加值,但当我尝试这样做时(在main类中),无论我尝试什么,我都会得到一个NullPointerException。请注意,当我注释掉initialize()方法中的ChoiceBox代码(参见下面)时,项目成功运行,因此NPE没有其他原因。

    null
<ChoiceBox fx:id="itemKeuze" layoutX="132.0" layoutY="33.0" prefWidth="150.0" />
public class HoofdScherm extends Application {
   @FXML
   private ChoiceBox<String> itemKeuze;

   @Override
   public void start(Stage scherm) throws IOException
   {
      // The setup and loading of the FXML file...
   }

   @FXML
   private void initialize()
   {
      // Now I'm only trying to disable the combobox instead of setting the values but the NPE is also thrown
      itemKeuze.setDisable(true);
   }

private void toonItemScherm()
{
    Parent itemScherm = null;

    try {
        itemScherm = FXMLLoader.load(getClass().getResource("ItemScherm.fxml"));
    } catch (Exception e) {
        System.out.println("Kon itemScherm niet laden: " + e.getMessage());
    }

    //itemKeuze.setItems(FXCollections.observableArrayList("CD", "Film", "Spel"));
    //itemKeuze.setDisable(true);

    stage = new Stage();
  stage.setTitle("Voeg item toe");
  stage.setResizable(false);
  stage.setAlwaysOnTop(true);
  stage.setScene(new Scene(itemScherm));  
  stage.show();
}
}

堆栈跟踪

Exception in Application start method
Exception in thread "main" java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.launcher.LauncherHelper$FXHelper.main(Unknown Source)
Caused by: java.lang.RuntimeException: Exception in Application start method
    at com.sun.javafx.application.LauncherImpl.launchApplication1(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication$155(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException: 
/C:/Users/Isaak/Documents/workspace/JavaPracticumOpdracht3/bin/view/HoofdScherm.fxml

    at javafx.fxml.FXMLLoader.constructLoadException(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.loadImpl(Unknown Source)
    at javafx.fxml.FXMLLoader.load(Unknown Source)
    at view.HoofdScherm.start(HoofdScherm.java:38)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$173(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(Unknown Source)
    at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(Unknown Source)
    at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
    at com.sun.glass.ui.win.WinApplication.lambda$null$148(Unknown Source)
    ... 1 more
Caused by: java.lang.reflect.InvocationTargetException
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.reflect.misc.Trampoline.invoke(Unknown Source)
    at sun.reflect.GeneratedMethodAccessor1.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at sun.reflect.misc.MethodUtil.invoke(Unknown Source)
    ... 18 more
Caused by: java.lang.NullPointerException
    at view.HoofdScherm.initialize(HoofdScherm.java:109)
    ... 27 more

共有1个答案

宋和颂
2023-03-14

我找到了答案,部分归功于James_D提出的观点。

我没有将控制器添加到第二个FXML文件fx:controller=“”中的AnchorPane。因为没有设置控制器,所以不能注入变量(fx:id->class variables)。我还为每个FXML文件创建了一个单独的控制器,因为所有内容都在扩展Apllication类的一个主类中。这也可能是问题的一部分。

 类似资料:
  • 在我的应用程序(,出现了一个向上箭头,表示,但我无法处理它来执行任何操作,甚至无法显示toast。我尝试了这个方法,并在选项ItemSelected()中处理了开关(item.getItemId()),但这两种解决方案都不适合我。我错过了一些东西,但不知道是什么。 这是我的代码: ... 我的整个选项项已选定: 我不知道其他代码是否重要: 在我的清单中,我没有父母活动。 我找到了这个答案,它似乎是

  • 我刚刚安装了一台新的计算机--全新的Java1.8安装,全新的3.5.2 Maven配置,现在我正在创建一个全新的quickstart Maven项目。 当我添加父Spring Boot启动程序和单个依赖项时,无论我做什么,它都无法解析它。

  • 我知道,它看起来像一个复制品,但其他解决方案都不起作用。我刚刚从Android Studio切换到IntelliJ IDEA(所以我不需要3,000个不同的IDE),设置好后,我创建了一个新项目,只是为了测试一切是否良好。Gradle构建开始不错,但随后它抛出了错误: 这是一个新的、普通的、未编辑的< code>build.gradle文件。 在消息中,我可以选择,这就是我的问题开始的地方。无论库

  • 我尝试样式复选框背景颜色,但它不会改变任何我做。我正在使用最新的火狐29。 是否在css中或浏览器中有一些规则更改? CSS: 下面是一个演示http://jsfidle.net/6kxrg/

  • 我正在尝试创建包含某些值的表的Excel文件。问题是,无论我做什么,Java都会创建损坏的Excel文件(.xlsx、.xlsm)。 更改现有表的列文件的名称已损坏,如果不进行修复,则无法打开它。名称已更改,但由于某些原因,必须修复该文件。创建新表或为现有表创建新列似乎会损坏文件,但我不知道为什么。 这是我的全部代码: 附言:我是Java初学者——我在Java上有三年的Rest时间。我为我的语言道

  • 我将首先说,我已经查看并尝试了我能找到的每个问题的解决方案。最大的问题是,这些解决方案中的大多数都非常古老,Spring Boot在过去几年中发生了很大变化。明确地说,我已经尝试了这个、这个、这个、这个等等。我还阅读了许多教程。没有任何效果。 我有一个全新的Spring Boot应用程序,我正在尝试让JSP渲染与之一起工作。这些是我的依赖项: 我的项目安排如下: “WEB-APP/jsp”只是我尝