我整个下午一直在努力解决这个问题而没有成功,所以我想我会问这里。
我一直在试图通过JFrame中的JDialog调用的对象上出现AWT-EventQueue-0
错误。我觉得它与线程有关,因为我在JDialog之前调用对象(daoArrayList
)来测试它是否存在而且确实存在。然而,当我从方法launchDropWindow()
中调用它时,我收到错误AWT-EventQueue-0
。
有没有人对此错误发生的原因有任何建议?
错误发生在我的代码中的daoArrayList.get(0)
:
private synchronized void launchDropWindow() throws SQLException {
// Returns 0 if yes is chosen
int choice = JOptionPane.showConfirmDialog(this, "Drop all tables, and exit the program?",
"Drop Tables", JOptionPane.YES_NO_OPTION);
if(choice == 0) {
daoArrayList.get(0) // Error
}
}
但是,我在课程开始时调用System.out.print(daoArrayList.get(1).toString())
以确保该值存在,并且确实存在。我不知道为什么使用JOptionPane会产生错误。
谢谢,
public class MenuFrame extends JFrame {
private static final long serialVersionUID = 6311376927818220673L;
private static Logger LOG = LogManager.getLogger();
private JPanel contentPane;
private Connection connection;
private ArrayList<Dao> daoArrayList;
/**
* Create the frame.
*/
public MenuFrame(ArrayList<Dao> daoArrayList, Connection connection) {
LOG.info("Creating frame");
System.out.print(daoArrayList.get(1).toString()); // This works for some reason?
setDaoArray(daoArrayList);
setConnection(connection);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
JMenuBar menuBar = new JMenuBar();
setJMenuBar(menuBar);
// File
JMenu mnFileMenu = new JMenu("File");
menuBar.add(mnFileMenu);
JMenuItem mntmDrop = new JMenuItem("Drop");
mntmDrop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
launchDropWindow();
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
mnFileMenu.add(mntmDrop);
JMenuItem mntmQuit = new JMenuItem("Quit");
mntmQuit.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
try {
closeConnection();
} catch (SQLException e1) {
e1.printStackTrace();
}
System.exit(0);
}
});
mnFileMenu.add(mntmQuit);
// Books
JMenu mnBooks = new JMenu("Books");
menuBar.add(mnBooks);
JMenuItem mntmCount = new JMenuItem("Count");
mnBooks.add(mntmCount);
JMenuItem mntmByAuthor = new JMenuItem("By Author");
mnBooks.add(mntmByAuthor);
JMenuItem mntmBooksByDecending = new JMenuItem("Descending");
mnBooks.add(mntmBooksByDecending);
JMenuItem mntmBooksByList = new JMenuItem("List");
mnBooks.add(mntmBooksByList);
// Customers
JMenu mnCustomers = new JMenu("Customers");
menuBar.add(mnCustomers);
JMenuItem mntmCustomerCount = new JMenuItem("Count");
mnCustomers.add(mntmCustomerCount);
JMenuItem mntmByJoinDate = new JMenuItem("By Join Date");
mnCustomers.add(mntmByJoinDate);
JMenuItem mntmCustomerList = new JMenuItem("List");
mnCustomers.add(mntmCustomerList);
// Purchases
JMenu mnPurchases = new JMenu("Purchases");
menuBar.add(mnPurchases);
JMenuItem mntmTotalPurchses = new JMenuItem("Total");
mnPurchases.add(mntmTotalPurchses);
JMenuItem mntmPurcahsesByLastName = new JMenuItem("By Last Name");
mnPurchases.add(mntmPurcahsesByLastName);
JMenuItem mntmPurchasesByTitle = new JMenuItem("By Title");
mnPurchases.add(mntmPurchasesByTitle);
JMenuItem mntmPurchasesByDecending = new JMenuItem("Decending");
mnPurchases.add(mntmPurchasesByDecending);
JMenuItem mntmFilterByCustomer = new JMenuItem("Filter by Customer ID");
mnPurchases.add(mntmFilterByCustomer);
// Help
JMenu mnHelpMenu = new JMenu("Help");
menuBar.add(mnHelpMenu);
JMenuItem mntmAbout = new JMenuItem("About");
mntmAbout.addActionListener(e -> launchAboutWindow());
mnHelpMenu.add(mntmAbout);
// Content for JPanel
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
contentPane.setLayout(new BorderLayout(0, 0));
setContentPane(contentPane);
}
private synchronized void launchDropWindow() throws SQLException {
// Returns 0 if yes is chosen
int choice = JOptionPane.showConfirmDialog(this, "Drop all tables, and exit the program?",
"Drop Tables", JOptionPane.YES_NO_OPTION);
if(choice == 0) {
daoArrayList.get(0); // This is where the error is popping up
}
}
private void launchAboutWindow() {
JOptionPane.showMessageDialog(MenuFrame.this, "Assignment02 \nBy Rob DeFilippi a01034167",
"About Assignement02", JOptionPane.INFORMATION_MESSAGE);
}
private void setDaoArray(ArrayList<Dao> daoArrayList) {
if (daoArrayList != null) {
daoArrayList = this.daoArrayList;
}
}
private void setConnection(Connection connection) {
if (connection != null) {
this.connection = connection;
}
}
private void closeConnection() throws SQLException {
LOG.info("Program done. Closing connection.");
connection.close();
}
}
以下是错误:
a01034167.dao.CustomerDao@649f2009Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at a01034167.ui.MenuFrame.launchDropWindow(MenuFrame.java:172)
at a01034167.ui.MenuFrame.access$0(MenuFrame.java:164)
at a01034167.ui.MenuFrame$1.actionPerformed(MenuFrame.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.AbstractButton.doClick(AbstractButton.java:376)
at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:833)
at com.apple.laf.AquaMenuItemUI.doClick(AquaMenuItemUI.java:157)
at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6535)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6300)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4891)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4713)
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:2750)
at java.awt.Component.dispatchEvent(Component.java:4713)
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)