2017-07-07 57 views
0

我試圖通過按下JavaFx中的按鈕將數據寫入文本文件。但是唯一的問題是,當我嘗試使用聲明,「在我的按鈕處理方法中拋出IOException」時,事情似乎不起作用。這是我的代碼。如何捕捉javafx中的IOException

import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.stage.Stage; 
import javafx.scene.Scene; 
import javafx.scene.Group; 
import javafx.scene.control.Button; 
import java.io.*; 
import java.io.File; 
import java.io.FileInputStream; 

public class testingFx extends Application{ 
//Create controls 
private Button write; 
private Scene main; 
private Button Exit; 
private Scene sceneMain; 
private File records; 
private FileWriter fw; 

public static void main(String[] args){ 
    launch(args); 
} 

@Override 

public void start(Stage stage) throws IOException{ 

    //Create new file 
    records = new File("records.txt"); 
    records.createNewFile(); 
    //Create FileWriter 
    fw = new FileWriter(records); 

    //Create root, format controls, scene, etc... 
    Group root = new Group(); 
    write = new Button(); 
    write.setText("Write"); 
    write.setOnAction(this::processButtonPress); 
    root.getChildren().addAll(write); 
    main = new Scene(root,300,300); 
    stage.setScene(main); 
    stage.show(); 
} 
    public void processButtonPress(ActionEvent event) throws IOException{ 
    if (event.getSource() == write){ 
     //On button press write to file 
     fw.write("Testing file writing"); 
     //Close filewriter 
     fw.close(); 
    } 
    } 
} 

我試圖在網上找到答案,但我被教導要處理按下按鈕的方式,從大多數人的例子(也稱部分(這:: processButtonPress))不同。我不確定是否使用try/catch語句可以幫助我,因爲我沒有任何經驗,請原諒我。我特別要得到的錯誤是「錯誤:方法參考中出現不兼容的拋出類型IOException」。感謝您的幫助。

我試着在主題上提出這個問題,並且很容易解決。請讓我知道是否有任何明顯的問題。

+0

你必須處理方法中IOException異常。 – f1sh

回答

1

您絕對需要使用try/catch語句來捕獲異常。

如果您更新方法,如我所示,您將捕獲異常。

然後您需要添加代碼來處理異常,所以程序將繼續成功。

public void processButtonPress(ActionEvent event) { 
     if (event.getSource() == write) { 
      try { 
       // On button press write to file 
       fw.write("Testing file writing"); 
       // Close filewriter 
       fw.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 

       // Code to handle goes here... 
      } 
     } 
    } 
+0

非常出色!我將不得不更多地研究這些陳述。謝謝你的幫助! –

+0

是的,很難寫出沒有異常處理的好代碼。只要你想知道,try塊中的代碼將一行一行地運行,直到它拋出異常爲止。一旦拋出,try塊中的所有附加代碼都將被跳過。只有catch塊中的代碼纔會執行​​。 – gabe870

+0

如果你解釋了爲什麼IOException不能在動作處理器的throws子句中,這將是一個更好的答案。 – VGR

2

我建議使用try-with-resources statement來自動關閉您的作者。你

還可以實現動作的處理程序是這樣的:

write.setOnAction(event -> { 
    if (event.getSource() == write) { 
     try { 
      try (FileWriter fw = new FileWriter(records)) { 
       //On button press write to file 
       fw.write("Testing file writing"); 
      } 
     } catch (IOException e) { 
      // TODO process the exception properly 
      e.printStackTrace(); 
     } 
    } 
});