Nano Hash - криптовалюты, майнинг, программирование

NullPointerException в JavaFX инициализируется в TableView

У меня есть этот класс контроллера для отображения запроса к базе данных в 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);
    }
}

Исключение NullPointer:

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

Любое решение?


Ответы:


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, не аннотировано. В результате, когда вызывается ваш метод инициализации, поле tbcNome содержит ссылку null, что приводит к исключению.

Чтобы решить вашу проблему, все, что вам может понадобиться, это добавить аннотацию @FXML к объявлению поля экземпляра для tbcNome.

Возможно, вы поощряли эту ошибку, приняв привычку перечислять более одной переменной в объявлениях вашего типа, например. private Button btAdicionar, btConsultar;. На мой взгляд, это плохая привычка, которая может способствовать совершению подобных ошибок. Я бы посоветовал вам попытаться принять стиль кодирования, в котором каждое поле экземпляра имеет свой собственный оператор объявления типа.

10.05.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..