英文:
Can't advance in different Jframe Form (Logger.getLogger method)
问题
我在我的库中添加了rs2xml和derby,一开始它是工作的,但是在为derby添加连接并为我的表添加刷新功能后,JFrame
表单无法继续到下一个JFrame
表单。
以下是用于转到下一个JFrame
的代码,但它不起作用,但没有错误:
int confirmed = JOptionPane.showConfirmDialog(null,
"确定要继续到库存表吗?",
"确认按钮消息框",
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, "已取消");
}
以下是我希望进入的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
和catch
在logger.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)
英文:
I added rs2xml and derby in my libraries, it was working at the start but after adding the connection for derby and refresh function for my Tables, the JFrame
form can't proceed to the next JFrame
Form
These are the codes to move to the next JFrame
but it's not working but there is no errors
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");
}
and these are the codes in the JFrame
form that I wish to get to but it won't advance to that JFrame
form.
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);
}
}
});
}
I tried everything I knew. Even searched the Internet on what to do but can't seem to find the solution. I know it's the try
and catch
in logger.getlogger
that's causing the error I just don't know how to fix it
here is the error log
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)
答案1
得分: 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 程序怎么处理。你不应该只是忽视它。而仅仅显示错误消息实质上是忽视了错误。
英文:
Your question has nothing to do with Swing. And I also don't understand why you tagged it with sql-server since you state that you are using Derby.
You are failing to connect to the database, i.e. the following line of your code is throwing an exception.
con = DriverManager.getConnection(host, uName, uPass);
Subsequently, the stmt
member of class InformationofCafe
is not initialized and therefore is null.
The way your code handles the database connection error is to display the error message in a JOptionPane
. That means your program continues to run and when it gets to the following line of your code, it throws NullPointerException
because stmt
is null.
rs=stmt.executeQuery("SELECT * FROM STOCK");
I suggest you write a simple program, without a GUI that tries to connect to Derby and then executes a SQL query. Once you get that right, you can fix the code in your GUI. Have you read the documentation for Derby?
You need to think about what you want your GUI program to do if there is a problem with connecting to the database or retrieving data from the database. You shouldn't just ignore it. And just displaying the error message is essentially ignoring the error.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论