简体   繁体   中英

JFrame Open a file from Chooser

So I have a JFrame and an option that says List Files as a menu, if this is clicked, a window opens up that lets you pick a file. But what I am having problems with is opening the file and loading it into a new window, any help please? My code is below, this is what I've tried, but I seem to be getting errors so I think I did it wrong, also I am getting a syntax error at the end of the ActionPerformed method saying '} expected' but the program runs, not sure what that's about.

public class MyJFrame extends JFrame {

JMenuBar menubar;
JMenu menu, submenu;
JMenuItem mi;

public MyJFrame(String title) {
    super(title);
    menubar = new JMenuBar();
    setJMenuBar(menubar);
    buildMenu();
}

void buildMenu() {
    menu = new JMenu("File");

    mi = new JMenuItem("New");
    menu.add(mi);
    menubar.add(menu);

    mi = new JMenuItem("List Files");
    menu.add(mi);
    menubar.add(menu);
    menu.addSeparator();
    mi.addActionListener(

            new ActionListener() {
                private Component frame;

                @Override
                public void actionPerformed(ActionEvent enterPress) {
                    JFileChooser chooser = new JFileChooser();
                    File file1;
                    JFileChooser selection = null;
                    chooser.setCurrentDirectory(new java.io.File("."));
                    chooser.setSelectedFile(new File(""));
                    chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
                    if (chooser.showOpenDialog(frame) == JFileChooser.OPEN_DIALOG) {
                        file1 = selection.getSelectedFile();
                    } else {

                    }
                }
            };

    mi = new JMenuItem("Save As");
    menu.add(mi);
    menubar.add(menu);
    menu.addSeparator();

    mi = new JMenuItem("Close");
    menu.add(mi);
    menubar.add(menu);
}
}

Error log when selecting a file from the chooser:

run:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at MyJFrame$1.actionPerformed(MyJFrame.java:51)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at     javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
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 javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:877)
at java.awt.Component.processMouseEvent(Component.java:6527)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
at java.awt.Component.processEvent(Component.java:6292)
at java.awt.Container.processEvent(Container.java:2234)
at java.awt.Component.dispatchEventImpl(Component.java:4883)
at java.awt.Container.dispatchEventImpl(Container.java:2292)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
at java.awt.Container.dispatchEventImpl(Container.java:2278)
at java.awt.Window.dispatchEventImpl(Window.java:2739)
at java.awt.Component.dispatchEvent(Component.java:4705)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:719)
at java.awt.EventQueue$4.run(EventQueue.java:717)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
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)

You've got TWO JFileChoosers, and one is null:

JFileChooser chooser = new JFileChooser(); // *** number 1
File file1;
JFileChooser selection = null;             // *** number 2
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setSelectedFile(new File(""));
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (chooser.showOpenDialog(frame) == JFileChooser.OPEN_DIALOG) {
    file1 = selection.getSelectedFile();
} else {

}

Don't do that -- use only ONE non-null chooser, eg,

JFileChooser chooser = new JFileChooser(); // *** Keep
File file1;
//   JFileChooser selection = null;        // *** get rid of
chooser.setCurrentDirectory(new java.io.File("."));
chooser.setSelectedFile(new File(""));
chooser.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
if (chooser.showOpenDialog(frame) == JFileChooser.OPEN_DIALOG) {
    // file1 = selection.getSelectedFile(); // **** NO ****
    file1 = chooser.getSelectedFile(); // **** YES ****

} else {

}

More importantly, you need to learn the general concepts of how to debug a NPE (NullPointerException). You should inspect the line carefully that throws it, find out which variable is null, and then trace back into your code to see why. You will run into these again and again, trust me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM