JDialog和JFrame出现“AWT-EventQueue-0”错误;线程问题?

时间:2018-03-18 02:55:02

标签: java multithreading jframe jdialog

我整个下午一直在努力解决这个问题而没有成功,所以我想我会问这里。

我一直在试图通过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)

0 个答案:

没有答案