2012-01-27 4 views
1

Я использую Eclipse, чтобы написать код, и я получаю красное подчеркивание в customHandler.saveTransactionToFile(); и говоритНеобработанного исключения типа IOException в Затмении

Unhandled типа Exeption IOException.

Почему это происходит и как я могу его решить?

// Call method in customHandler class to write to file when button is pressed 
public void actionPerformed(ActionEvent event) 
{ 
    // Save transactions to file 
    if(event.getSource()== buttonSaveTransaction) 
    { 
     customHandler.saveTransactionToFile(); 
    } 
} 

// Method in class customHandler that writes to file 
public void saveTransactionToFile() throws IOException 
{ 
    System.out.println("Skriver till fil"); 
    File outFile = new File("C:/JavaBank/" + selectedCustomerAccountNumber + ".data"); 
    FileOutputStream outFileStream = new FileOutputStream(outFile); 
    PrintWriter outStream = new PrintWriter(outFileStream); 
    outStream.println("test"); 
    outStream.close(); 
} 
+5

Нажмите красную пулю, которую Eclipse показывает слева от линии и попробуйте одно из предложений по ее автоматическому исправлению. В то же время, узнайте, как справляться с исключениями на Java, читая учебник поставщика: http://docs.oracle.com/javase/tutorial/essential/exceptions/ – BalusC

+0

, вероятно, не содержит файл библиотеки - попробуйте импортировать java.io - вы выясните, какую конкретную библиотеку io вам нужно – jamesTheProgrammer

ответ

2

Внутри вашего метода actionPerformed() ,, написать

customHandler.saveTransactionToFile(); 

написать это как

public void actionPerformed(ActionEvent event) 
{ 
    // Save transactions to file 
    if(event.getSource()== buttonSaveTransaction) 
    { 
     try 
     { 
      customHandler.saveTransactionToFile(); 
     } 
     catch(IOException ioe) 
     { 
      ioe.printStackTrace(); 
     } 
    } 
} 

Чтобы ответить, почему вы должны сделать это «Это связано с тем, что метод, вызываемый, например, для customHandler.saveTransactionToFile();, как известно, выдает исключение IOException, указанное вами в определении».

Надежда, которая поможет

Привет

+0

Спасибо! Но что это делает код и почему это необходимо? Это просто потому, что это actionlistener или необходимо, чтобы весь метод вызывал другие методы с сохранением файлов? –

+0

@ 3D-kreativ: Нет, это не потому, что его actionListener, так как вы вызываете метод, который может вызывать IOException, поэтому он должен находиться внутри блока catch try. IOException (Сигналы о том, что произошло какое-либо исключение ввода-вывода.Этот класс является общим классом исключений, вызванных неудачными или прерванными операциями ввода-вывода). Надеюсь, это поможет. С уважением –

+0

Спасибо, немного сложно понять, как это работает, но работает! –

3

поскольку saveTransactionToFile бросает исключение, actionPerformed, который вызывает этот метод, нужно поймать и обработать его.

public void actionPerformed(ActionEvent event) 
{ 
    // Save transactions to file 
    if(event.getSource()== buttonSaveTransaction) 
    { 
     try { 
      customHandler.saveTransactionToFile(); 
     } catch(IOException e) { 
      // I broke, make sure you do something here, so the user 
      // knows there was an error 
     } 
    } 
} 

Обратите внимание, что вам нужно обработать исключение здесь (или в saveTransactionToFile). actionPerformed не может бросить проверяемые исключения ....

+0

или делегировать ее вызывающему абоненту 'throws', если метод сам по себе не может обработать его каким-либо разумным способом. – BalusC

+0

ОК, это было что-то новое! Как это делается? –

+1

@ 3D: Точно так же, как вы уже делали по методу 'saveTransactionToFile()'. Но в этом конкретном случае я просто поймал его и покажу некоторое диалоговое окно сообщения, информирующее конечного пользователя о том, что сэкономить не удалось. * Это * разумный способ справиться с исключением. Просто распечатайте stacktrace и игнорируйте его дальше, так как некоторые ответы предлагают * не * разумно и оставляют enduser открытым вопросом, где находится файл сохраненного файла. – BalusC

1

Окружите его в попытке поймать

try 
{ 
    if(event.getSource()== buttonSaveTransaction) 
    { 
     customHandler.saveTransactionToFile(); 
    } 
} 
catch(IOException e) 
{ 
//manage exception 
} 
0

Вы можете использовать это, а также увидеть ответ на hvgotcodes.

try { 
    customHandler.saveTransactionToFile(); 
} catch (IOException e) { 
    e.printStackTrace(); 
} 
Смежные вопросы