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

その他のクラスを宣言するか、JFrame クラスを使用して、新しいクラス/インターフェイスを宣言するか、それ自体を宣言することによって、JFileChooser への呼び出しを委譲します。実際には、Main メソッドから JFileChooser を呼び出す意味はありません。

于 2012-06-06T03:23:31.833 に答える