2014-09-05 105 views
0

你好工作在一個小的程序,將數據寫入文件。我正在使用if else語句進行驗證,因此我需要在單獨的方法中使用PrintWriter和FileWriter類/聲明。然後我用主類的構造函數調用這個方法。我遇到的問題是當我將Printwriter類移到它自己的方法時,我無法再從我的按鈕單擊aciton l istener訪問它。PrintWriter類在一個單獨的方法

CODE:

private void OpenFilePW(){ 
    try{ 
     String inputFileName = "addressBook.txt"; 
     FileWriter fw = new FileWriter(inputFileName, true); 
     PrintWriter outputFile = new PrintWriter(fw); 

    }catch(IOException error){ 
     JOptionPane.showConfirmDialog(null, error); 
    } 
} 

當使用OUTPUTFILE。我得到一個錯誤,因爲它找不到outputFile。爲什麼不做這項工作?

+1

可能是一個範圍問題? 'outputFile'只在'try'塊中定義,所以在其他地方使用它顯然是一個問題。也許讓它成爲一個實例變量? – jackarms 2014-09-05 03:22:16

+0

感謝此工作。我沒有意識到,當你在try塊中定義一個變量時,它只能在該語句中可見。我認爲這是類寬 – 2014-09-05 04:09:04

回答

1

定義的PrintWriter在你的主CALSS一個實例變量 不知道什麼是你想用這個

,但把它公開得到它的工作,或者如果你工作不使用任何修改同一類

所以你的代碼應該是

public class MyClass 
{ 
    public PrintWriter outputFile; 
..... 
} 

然後實例實例,當你的方法

outputFile = new PrintWriter(fw); 
+0

感謝這工作。我沒有意識到,當你在try塊中定義一個變量時,它只能在該語句中可見。我認爲這是全班上課。 – 2014-09-05 04:06:17

+0

事實上,這是一個雙重問題,它不適合你,不是因爲它在try塊中,所有在方法中聲明的變量都是局部的,只有這個方法,試圖在方法內聲明一個int,但是在外面try catch塊會是同樣的問題。 這是一個雙重問題,因爲即使在相同的方法中,try塊中的變量只對try塊是本地的! 如果你想使用它,你必須在外面聲明它 – 2014-09-05 04:10:24

0

首先(按照慣例),Java方法名稱以小寫字母開頭。其次,你不必返回PrintWriter你分配給一個方法局部變量 -

private PrintWriter openFilePW(){ 
    try{ 
    String inputFileName = "addressBook.txt"; 
    FileWriter fw = new FileWriter(inputFileName, true); 
    return new PrintWriter(fw); 
    } catch(IOException error) { 
    JOptionPane.showConfirmDialog(null, error); 
    } 
    return null; 
} 

或者,你可以分配PrintWriter一類級別的變量,

private PrintWriter outputFile = null; 
private void openFilePW(){ 
    try{ 
    String inputFileName = "addressBook.txt"; 
    FileWriter fw = new FileWriter(inputFileName, true); 
    outputFile = new PrintWriter(fw); 
    } catch(IOException error) { 
    JOptionPane.showConfirmDialog(null, error); 
    } 
}