ask:使用java.lang.NullPointerException从数据库中显示Jtable的错误

时间:2015-07-26 18:24:05

标签: 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 "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)

这是在DatabarangController.java:54

frameDatabarang.JtableDatabarang().setModel(dtm);

在我的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);

        }
    }

这是JFrameDatabarang.java:130

databarangController.isiTable();

in

    public JFrameDatabarang() {
    initcomponent();

    databarangController = new DatabarangController(this);
    databarangController.isiTable();

    JtableDatabarang = new JTable();
    JtableDatabarang.addMouseListener(new MouseAdapter() {
        @Override
        public void mouseClicked(MouseEvent e) {
            databarangController.isiField(JtableDatabarang.getSelectedRow());


        }
    });
    JtableDatabarang.setBounds(17, 384, 599, 136);
    contentPane.add(JtableDatabarang);

    }

@Katja 我把jtableDatabarang包含在公共JframeDatabarang()

如此。之后我把recomend推荐为@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 on

中搜索与我相同的错误主题
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String

什么都得不到解决方案。

2 个答案:

答案 0 :(得分:1)

构建JFrameDatabarang时会发生这种情况:

  1. JFrameDatabarang的构造函数中,您将对this的引用传递给databarangController的构造函数。
  2. 您在控制器上调用方法isiTable
  3. isiTable尝试执行frameDatabarang.JtableDatabarang().setModel(dtm);并失败(JtableDatabarang()为getter,如评论中所确认)。在程序可以在JtableDatabarang中创建JFrameDatabarang对象之前抛出异常。
  4. 最好避免将this传递出构造函数,因为使用未完全构造的对象可能会导致很难找到错误。

    至少确保在使用之前创建了所有内容(例如JtableDatabarang)。

答案 1 :(得分:1)

正如Katja所说,你的订单是错误的,所以改变:

databarangController = new DatabarangController(this);
databarangController.isiTable();

JtableDatabarang = new JTable();

到:

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