【问题标题】:NullPointerException in JavaFX initialize in TableViewJavaFX 中的 NullPointerException 在 TableView 中初始化
【发布时间】:2015-07-20 17:07:48
【问题描述】:

我有这个控制器类用于在 TableView 中显示数据库查询,但我遇到了 NullPointerException 错误,“setCellValueFactory(new PropertyValueFactory”)

package aplicativo;

import java.net.URL;
import java.util.ResourceBundle;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class Controle implements Initializable{
    @FXML
    private TextField txtCampo,txtCampo2;
    @FXML
    private Button btAdicionar,btConsultar;
    @FXML
    private TableView<Pessoa> tabValues;
    @FXML
    private TableColumn<Pessoa, Integer> tbcCod;
    private TableColumn<Pessoa, String>tbcNome;
    ObservableList<Pessoa> List = FXCollections.observableArrayList();
    @FXML
    private void btAdd(){
        insertBD a = new insertBD(txtCampo.getText());
        consultaBD b = new consultaBD();
        List = b.consultaTudo();
        tabValues.setItems(List);
        txtCampo.clear();
    }
    @FXML

    private void btCons(){
        String tx = txtCampo2.getText();
        if(tx.isEmpty()){

        }else{
        consultaBD a = new consultaBD();
        a.consultaParecido(tx, "nome");
        txtCampo2.clear();
        }
    }
    @Override
    public void initialize(URL arg0, ResourceBundle arg1) {

        // TODO Auto-generated method stub
        tbcCod.setCellValueFactory(new PropertyValueFactory<Pessoa, Integer>("cod"));
        tbcNome.setCellValueFactory(new PropertyValueFactory<Pessoa, String>("nome"));
        tabValues.setItems(List);
        tabValues.getColumns().addAll(tbcCod,tbcNome);
    }
}

NullPointerException:

Exception in Application start method
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 com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(Unknown Source)
    at com.sun.javafx.application.LauncherImpl.launchApplication(Unknown Source)
    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$152(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$$Lambda$50/1645995473.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
Caused by: javafx.fxml.LoadException: 
/C:/Users/lucas/workspace/BDFX/bin/aplicativo/Tela.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 aplicativo.Main.start(Main.java:13)
    at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$159(Unknown Source)
    at com.sun.javafx.application.LauncherImpl$$Lambda$53/1031257736.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$172(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$45/186276003.run(Unknown Source)
    at com.sun.javafx.application.PlatformImpl.lambda$null$170(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$48/1529876784.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.sun.javafx.application.PlatformImpl.lambda$runLater$171(Unknown Source)
    at com.sun.javafx.application.PlatformImpl$$Lambda$47/237061348.run(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$145(Unknown Source)
    at com.sun.glass.ui.win.WinApplication$$Lambda$36/2117255219.run(Unknown Source)
    ... 1 more
Caused by: java.lang.NullPointerException
    at aplicativo.Controle.initialize(Controle.java:52)
    ... 23 more
Exception running application aplicativo.Main

有什么办法吗?

【问题讨论】:

    标签: java javafx tableview javafx-8


    【解决方案1】:

    您的控制器中的一个实例字段缺少@FXML 注释。由于该字段是私有的,因此 FXML 加载器无法在加载期间将控件引用注入该字段。以下是您的实例字段声明:

    @FXML
    private TextField txtCampo,txtCampo2;
    
    @FXML
    private Button btAdicionar,btConsultar;
    
    @FXML
    private TableView<Pessoa> tabValues;
    
    @FXML
    private TableColumn<Pessoa, Integer> tbcCod;
    
    private TableColumn<Pessoa, String>tbcNome;
    

    请注意,最后一个字段 tbcNome 没有注释。结果,当你的initialize方法被调用时,tbcNome字段包含了null引用,导致异常。

    要解决您的问题,您可能需要做的就是将@FXML 注释添加到tbcNome 的实例字段声明中。

    您可能通过在类型声明中列出多个变量的习惯来鼓励这个错误,例如。 private Button btAdicionar, btConsultar;。在我看来,这是一个坏习惯,会鼓励这样的错误发生。我建议你尝试采用每个实例字段都有自己的类型声明语句的编码风格。

    【讨论】:

      猜你喜欢
      • 2013-02-24
      • 2017-04-10
      • 2017-04-04
      • 1970-01-01
      • 2021-09-07
      • 1970-01-01
      • 1970-01-01
      • 2014-01-22
      相关资源
      最近更新 更多