首页 > 解决方案 > 不能以不同的 Jframe 形式推进(Logger.getLogger 方法)

问题描述

我在我的库中添加了rs2xmlderby,它在一开始就可以工作,但是在为我的表添加 derby 和刷新功能的连接后,JFrame表单无法继续到下一个JFrame表单

这些是移动到下一个的代码,JFrame但它不起作用但没有错误

int confirmed = JOptionPane.showConfirmDialog(null,
                                              "Are you sure you want to Continue to Stock Table?",
                                              "Confirm Button Message Box",
                                              JOptionPane.YES_NO_OPTION);
if (confirmed == JOptionPane.YES_OPTION) {
    try {
        new InformationofCafe().setVisible(true);
        this.setVisible(false);
    } catch (SQLException ex) {
        Logger.getLogger(Menu.class.getName()).log(Level.SEVERE, null, ex);
    }
} else {
    JOptionPane.showMessageDialog(Menu.this, "Cancelled");
}       

这些是JFrame我希望得到的形式的代码,但它不会推进到那种JFrame形式。

public class InformationofCafe extends javax.swing.JFrame {
    Connection con;
    Statement stmt;
    ResultSet rs;
    int cursorRow = 0;

    public InformationofCafe() throws SQLException {
        initComponents();
        DoConnect();
        update_table();
    }

    void update_table() throws SQLException {
        rs=stmt.executeQuery("SELECT * FROM STOCK");
        jTable.setModel(DbUtils.resultSetToTableModel(rs));
    }

    public Connection DoConnect() {
        try {
            String host ="jdbc:derby://localhost:1527//Downtown";
            String uName ="miguel";
            String uPass ="miguel";
            con = DriverManager.getConnection(host, uName, uPass);
            stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
                                       ResultSet.CONCUR_UPDATABLE );
            String sql = "SELECT * FROM STOCK";
            rs = stmt.executeQuery(sql);
            rs.next();
            int id_col = rs.getInt("ITEM");
            String id = Integer.toString(id_col);
            String description = rs.getString("DESCRIPTION");
            String amount = rs.getString("AMOUNT");

            TextItem.setText(id);
            TextDescription.setText(description);
            TextAmount.setText(amount);

            update_table();
        }
        catch (SQLException err) {
            JOptionPane.showMessageDialog(InformationofCafe.this,
                                          err.getMessage());
    }
    return con;
}

public static void main(String args[]) {
    java.awt.EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                new InformationofCafe().setVisible(true);
            } catch (SQLException ex) {
                Logger.getLogger(InformationofCafe.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    });
}

我尝试了我所知道的一切。甚至在互联网上搜索了该做什么,但似乎找不到解决方案。我知道这是导致错误的原因try,我只是不知道如何解决它:(catchlogger.getlogger

这是错误日志

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at activity3.InformationofCafe.update_table(InformationofCafe.java:33)
at activity3.InformationofCafe.<init>(InformationofCafe.java:29)
at activity3.Menu.InformationActionPerformed(Menu.java:130)
at activity3.Menu.access$000(Menu.java:23)
at activity3.Menu$1.actionPerformed(Menu.java:62)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
at java.awt.Component.processMouseEvent(Component.java:6533)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4525)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

标签: javaderby

解决方案


您的问题与Swing无关。而且我也不明白为什么你用sql-server标记它,因为你声明你正在使用Derby

您无法连接到数据库,即您的代码的以下行引发了异常。

con = DriverManager.getConnection(host, uName, uPass);

随后,stmt类的成员InformationofCafe未初始化,因此为空。

您的代码处理数据库连接错误的方式是在JOptionPane. 这意味着您的程序继续运行,并且当它到达您的代码的以下行时,它会抛出,NullPointerException因为它stmt是 null。

rs=stmt.executeQuery("SELECT * FROM STOCK");

我建议您编写一个简单的程序,没有尝试连接到 Derby 然后执行 SQL 查询的 GUI。一旦你做对了,你就可以在你的 GUI 中修复代码。您是否阅读过 Derby 的文档?

如果连接到数据库或从数据库检索数据出现问题,您需要考虑您希望 GUI 程序做什么。你不应该忽略它。仅显示错误消息本质上是忽略错误。


推荐阅读