2012-09-23 12 views
3

我想在我的代碼中使用文件選擇器,我在"int returnVal = fc.showOpenDialog(FileChooserDemo.this);"中收到錯誤"Not an enclosing class"。以下是我的代碼。任何猜測來解決它?java中的文件選擇器

browse_button.addActionListener(new ActionListener() { 
    public void actionPerformed(ActionEvent e) { 

    int returnVal = fc.showOpenDialog(FileChooserDemo.this); 

     File file = fc.getSelectedFile(); 

       log.append("Opening: " + file.getAbsolutePath() + "." + "\n"); 
       String ab=file.getAbsolutePath(); 
       System.out.println(ab); 

}}); 

我在主要方法中做了actionlistener

+0

是的我已經做了一個Jframe在瀏覽按鈕被添加。想法是,當browse_button被點擊時,文件選擇器應該出現。 – user841852

+1

我認爲「fc」需要在代碼中聲明爲final,然後才能創建動作偵聽器,或者聲明爲類中的成員字段 – MadProgrammer

+1

@Mad:否,「final」在此不起作用。如果這是問題,那麼錯誤信息會明確說明(正如我們都經歷過的那樣)。 –

回答

3

你的問題是你在靜態方法main(...)中進行此調用,並試圖在此靜態方法內使用FileChooserDemo.this(對封閉類的引用)。那麼這是行不通的,因爲靜態世界中沒有this。解決方案是在非靜態代碼(如非靜態方法或類的構造函數)中執行此操作。

+0

有沒有什麼辦法可以在主要方法中使用它呢?其餘的代碼也在main方法中。 – user841852

+0

當我在構造函數中使用它時,它給出了同樣的錯誤:/ – user841852

+0

好吧,我得到了我想要的。我只編輯了 「int returnVal = fc.showOpenDialog(null);」 。 @ Hovercraft充滿鰻魚你是對的。但我想現在使用「null」將會適用於mr。感謝您的幫助...... – user841852