ask:使用java.lang.NullPointerException从数据库显示Jtable时出错

ask:使用java.lang.NullPointerException从数据库显示Jtable时出错,java,swing,jtable,Java,Swing,Jtable,我已经运行了我的主要方法 package com.dascom.view; public class Main { public static void main(String[] args) { new JFrameDatabarang().setVisible(true); } } 并得到错误 Connection succes Exception in thread "mai

我已经运行了我的主要方法

package com.dascom.view;

    public class Main {

        public static void main(String[] args) {

            new JFrameDatabarang().setVisible(true);

        }

    }
并得到错误

        Connection succes
        Exception in thread "main" java.lang.NullPointerException
            at com.dascom.controller.DatabarangController.isiTable(DatabarangController.java:54)
            at com.dascom.view.JFrameDatabarang.<init>(JFrameDatabarang.java:130)
            at com.dascom.view.Main.main(Main.java:7)
在我的DatabarangConroller课上

public class DatabarangController {


        JFrameDatabarang frameDatabarang;
        Databarangimpl databarangimpl;
        List<Databarang> listDatabarang;


    public DatabarangController(JFrameDatabarang frameDatabarang)  {
    this.frameDatabarang = frameDatabarang;
    databarangimpl = new DatabarangDAO();
    listDatabarang = databarangimpl.getByAll();

    }


    public void isiTable() {
            listDatabarang = databarangimpl.getByAll();
            DatabarangTabelModel dtm = new DatabarangTabelModel(listDatabarang);
            frameDatabarang.JtableDatabarang().setModel(dtm);

        }
    }

@卡佳 我将jtableDatabarang包含在公共JframeDatabarang()中

所以。在我把reconned改为@katja和@Denish之后

JFrameDatabarang正在运行。我尝试在JFrameDatabarang中输入一个值

我出错了

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
at java.lang.Double.parseDouble(Double.java:538)
at com.dascom.controller.DatabarangController.insert(DatabarangController.java:74)
at com.dascom.view.JFrameDatabarang$3.actionPerformed(JFrameDatabarang.java:235)
这是DatabarangController.java:74

databarang.setHargajual(Double.parseDouble(frameDatabarang.JtextHargajual().getText()));
在DatabarangController类上,我插入了一个方法

public void insert()   {
    Databarang databarang = new Databarang();

    databarang.setNamabarang(frameDatabarang.JtextNamabarang().getText());
    databarang.setStok(Integer.parseInt(frameDatabarang.JtextStok().getText()));
    databarang.setHargajual(Double.parseDouble(frameDatabarang.JtextHargajual().getText()));
    databarang.setHargabeli(Double.parseDouble(frameDatabarang.JtextHargabeli().getText()));
    databarang.setSatuanukuran(frameDatabarang.JtextSatuanukuran().getText());
    databarang.setDeksripsi(frameDatabarang.JtextDeskripsi().getText());
    databarang.setKeterangan(frameDatabarang.JtextKeterangan().getText());

    databarangimpl.insertDatabarang(databarang);
}
我试图在stackoverflow中搜索与我相同错误的主题

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String

什么都得不到解决方案。

这是在构造
JFrameDatabarang
时发生的情况:

  • JFrameDatabarang
    的构造函数中,将对
    this
    的引用传递给
    databarangController
    的构造函数
  • 在控制器上调用方法
    isiTable
  • isiTable
    尝试执行
    frameDatabarang.JtableDatabarang().setModel(dtm)和失败(
    JtableDatabarang()
    作为getter,在注释中确认)。在程序到达
    JFrameDatabarang
    中创建
    JtableDatabarang
    对象之前抛出异常
  • 最好避免将此传递出构造函数,因为使用未完全构造的对象可能会导致难以发现的错误


    在使用之前,至少要确保所有东西(如
    JtableDatabarang
    )都已创建。

    正如Katja所指出的,您的订单是错误的,因此请更改:

    databarangController = new DatabarangController(this);
    databarangController.isiTable();
    
    JtableDatabarang = new JTable();
    
    致:


    可能是因为您将
    传递给
    JFrameDatabarang
    的构造函数中的方法,导致
    isiTable
    在对象完全构造之前使用该对象。我猜方法JtableDatabarang()返回null。你能提供这个方法的源代码吗?如果我在DatabarangController上设置null,它就不会调用frameDatabarang.JtableDatabarang().seModel(dtm)中的值@DenisLukenich你问的是哪种方法。请您解释一下:
    frameDatabarang.JtableDatabarang().setModel(dtm)
    调用方法
    JtableDatabarang()
    。我猜这个方法返回null。所以我要求提供源代码。katja你可以指定更多。我很难理解第三点。如何避免传递'databarangController=新databarangController(此);databarangController.isiTable();'见@DenisLukenich的答案:顺序很重要。注意正确初始化您将要使用的所有内容。如果不确定,请使用调试器逐步检查程序,以检查方法调用和变量内容。为了避免使用未完全构造的对象,只需在构造函数中执行必要的操作(如变量初始化)。显示帧是错误的,但显示值或从数据库向JtableDatabarang输入值是错误的。
    public void insert()   {
        Databarang databarang = new Databarang();
    
        databarang.setNamabarang(frameDatabarang.JtextNamabarang().getText());
        databarang.setStok(Integer.parseInt(frameDatabarang.JtextStok().getText()));
        databarang.setHargajual(Double.parseDouble(frameDatabarang.JtextHargajual().getText()));
        databarang.setHargabeli(Double.parseDouble(frameDatabarang.JtextHargabeli().getText()));
        databarang.setSatuanukuran(frameDatabarang.JtextSatuanukuran().getText());
        databarang.setDeksripsi(frameDatabarang.JtextDeskripsi().getText());
        databarang.setKeterangan(frameDatabarang.JtextKeterangan().getText());
    
        databarangimpl.insertDatabarang(databarang);
    }
    
    Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
    
    databarangController = new DatabarangController(this);
    databarangController.isiTable();
    
    JtableDatabarang = new JTable();
    
    JtableDatabarang = new JTable();
    databarangController = new DatabarangController(this);
    databarangController.isiTable();