2014-09-05 2 views
0

Здравствуйте, работайте над небольшой программой, которая записывает данные в файл. Я использую оператор if else для проверки, поэтому мне нужен класс/декларация PrintWriter и FileWriter в отдельном методе. Затем я вызываю этот метод с помощью конструктора основного класса. Проблема, с которой я столкнулась, - это когда я переместил класс Printwriter на свой собственный метод. Я больше не могу получить доступ к нему с помощью кнопки click aciton l isener.Класс PrintWriter в отдельном методе

КОД:

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

+0

Спасибо, это сработало. Я не понял, когда вы определяете переменную в блоке try, она видна только внутри этого оператора. Я предположил, что это классный класс –

ответ

1

определяет PrintWriter как переменный экземпляр в главном Calss не уверены, что вы пытаетесь использовать это для

но обнародует его, чтобы заставить его работать или не использовать какой-либо модификатор, если вы работаете в тот же класс

так что ваш код должен быть

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

, а затем создать экземпляр экземпляра, когда вы получите к методу

outputFile = new PrintWriter(fw); 
+0

Спасибо, что сработало. Я не понял, когда вы определяете переменную в блоке try, она видна только внутри этого оператора. Я предположил, что это классный. –

+0

На самом деле это двойная проблема здесь, она не работала для вас не потому, что она находится в блоке try, все переменные, объявленные в методе, являются локальными для этого и только этот метод, попробуйте объявить int внутри метода, но за пределами блок catch try был бы такой же проблемой. Это двойная проблема, потому что даже в том же методе переменная в блоке try локальна только для блока try! Если вы хотите использовать его стороной, вы должны объявить его снаружи –

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); 
    } 
}