【问题标题】:Can't advance in different Jframe Form (Logger.getLogger method)无法以不同的 Jframe 形式推进(Logger.getLogger 方法)
【发布时间】:2020-10-01 18:03:30
【问题描述】:

我在我的库中添加了rs2xmlderby,它在开始时工作,但在为我的表添加了德比和刷新功能的连接后,JFrame 表单无法继续到下一个@987654324 @表单

这些是移动到下一个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);
            }
        }
    });
}

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

这是错误日志

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)

【问题讨论】:

  • 我建议去掉 Logger 并用 ex.printStackTrace() 替换它。
  • 会尝试抓住留下来吗?
  • 是的。在 catch 块内,只需写 ex.printStackTrace()
  • 是的 rs2xml,我的错
  • 是否应该有一个导入来使用该代码?

标签: java derby


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 1970-01-01
    • 2013-11-05
    • 1970-01-01
    • 2018-12-16
    相关资源
    最近更新 更多