1

在此链接中我之前的帖子之后,我遇到了另一个问题。

给定以下代码:

public class GuiHandler extends javax.swing.JFrame {

// GuiHandler is the class that runs the entire project 
// here are two private fields that I use in the code , I have more but they
// irrelevant for the moment 

final JFileChooser openFiles = new JFileChooser();
private DataParser xmlParser = new DataParser();


// later on I have this method - XMLfilesBrowserActionPerformed


private void XMLfilesBrowserActionPerformed(java.awt.event.ActionEvent evt) {                                                

       //setting the file chooser
    openFiles.setFileSelectionMode(JFileChooser.FILES_ONLY);
    openFiles.setAcceptAllFileFilterUsed(false);
    if (openFiles.showOpenDialog(this) == JFileChooser.APPROVE_OPTION) {
        //getting the selected file
        File selected = openFiles.getSelectedFile();

// from here I parse the XML file that I opened with JFileChooser 
// with the help of one of my methods getNodeListFromFile
xmlParser.getNodeListFromFile(selected);

问题是我不能使用main之前在上面的链接中建议的声明(我必须补充一下这是一个非常好的:)),发布的代码是:

public class NativeFileChooser {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                try {
                    UIManager.setLookAndFeel(
                            UIManager.getSystemLookAndFeelClassName());
                } catch(Exception e) {
                    e.printStackTrace();
                }
                JFileChooser jfc = new JFileChooser();
                jfc.showOpenDialog(null);
            }
        });
    }
}

并且使用我的方法使以后操作文件main变得非常困难。XMLgetNodeListFromFile

我需要的是使用“简单”的浏览器JFileChooser,然后使用选择的文件,而不涉及main到 .

如果有人能解释我如何将上述代码(或其他任何内容)与我的代码一起使用,我将不胜感激。

最好的祝福

编辑:

如果我使用这样的代码;

  public void launchFileChooser() {

     SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(
                        UIManager.getSystemLookAndFeelClassName());
            } catch(Exception e) {
                e.printStackTrace();
            }
            JFileChooser jfc = new JFileChooser();
            jfc.setFileSelectionMode(JFileChooser.FILES_ONLY);
            jfc.setAcceptAllFileFilterUsed(false);
            if (jfc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION)
                 newFile = jfc.getSelectedFile();

        }
    });

  }

newFile是一个数据成员。

然后打开文件后,代码崩溃。

如果我创建jfc一个数据成员,代码将打开常规浏览器。知道如何解决吗?

谢谢

4

2 回答 2

2

我确信代码只是一个自包含的示例。

JFileChooser你应该GuiHandler以某种方式工作。如果有的话,您可以将该代码添加到您的 init 方法中GuiHandler

public class GuiHandler extends javax.swing.JFrame {

  //lots of your other code
  public void launchFileChooser() {
     SwingUtilities.invokeLater(new Runnable() {
        @Override
        public void run() {
            try {
                UIManager.setLookAndFeel(
                        UIManager.getSystemLookAndFeelClassName());
            } catch(Exception e) {
                e.printStackTrace();
            }
            JFileChooser jfc = new JFileChooser();
            jfc.showOpenDialog(null);
        }
    });
  }

  public static void main(String[] args) {
     GuiHandler handler = new GuiHandler();
     handler.launchFileChooser();
  }
}
于 2012-06-06T03:32:50.107 回答
1

声明任何 Other 类或使用 JFrame 类并通过声明新类/接口或在那里本身将调用委托给 JFileChooser ,实际上从 Main 方法调用 JFileChooser 没有任何意义

于 2012-06-06T03:23:31.833 回答