简体   繁体   English

JFrame从Chooser打开文件

[英]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. 因此,我有一个JFrame和一个选项,该选项说“列出文件”作为菜单,如果单击该菜单,则会打开一个窗口,您可以选择一个文件。 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. 我的代码在下面,这是我尝试过的内容,但是我似乎遇到了错误,因此我认为我做错了,在ActionPerformed方法的末尾也出现了语法错误,说“}期望”,但是程序运行,不知道那是什么。

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: 您有两个 JFileChoosers,一个为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). 更重要的是,您需要学习有关如何调试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. 您应该仔细检查抛出该行的行,找出哪个变量为null,然后追溯到您的代码以了解原因。 You will run into these again and again, trust me. 您会一次又一次地遇到这些,请相信我。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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