将对象存储到Java文件中不会起作用

时间:2016-04-01 12:26:59

标签: java arrays javafx

指令说:我需要创建一个JavaFX应用程序,当按下标记为Write的按钮时,它会存储一个包含五个int值1,2,3,4和5的数组,一个当前时间的Date对象,以及双倍值5.5。到名为Exercise17_05.dat的文件中。然后在打开Exercise17_05.dat的程序中编写一个方法,读取数据并显示到命令窗口。另外还有一个按钮标签Read,当按下该按钮时,程序将读取并显示Exercise17_05.dat的内容(由write创建)。使用TextArea显示结果,文本颜色为蓝色,背景为灰色

我觉得我越来越接近但是我一直收到这个错误"这个表达式的目标类型必须是功能性的  接口&#34 ;.由于错误,Javafx盒子甚至无法打开,所以我无法真正检查我的进度。我哪里出错了?

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;


public class module3 extends Application {

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

    @Override
    public void start(Stage primaryStage) throws ClassNotFoundException, IOException {

        // Text area
        TextArea textArea = new TextArea();
        textArea.setStyle("-fx-background-color: lightgrey; -fx-text-fill: blue; -fx-control-inner-background: grey");
        textArea.setPadding(new Insets(15, 15, 15, 15));


        Button write = new Button("Write");
        write.setOnAction(e -> {
            // Create an output stream for file
            try(ObjectOutputStream output = new ObjectOutputStream(new FileOutputStream("Exercise17_05.dat", true))) {
                int[] numbers = {1, 2, 3, 4, 5};
                // Write to file
                // 1. Write double
                output.writeDouble(5.5);
                // 2. Write int array object
                output.writeObject(numbers);
                // 3. Write date object
                output.writeObject(new java.util.Date());
                // 4. Write utf string
                output.writeUTF("Exercise17_05.dat");

            } catch(IOException exception) {
                System.exit(0);
            }
        });



        Button read = new Button("Read");
        read.setOnAction(e -> {

            //Create an input stream for file
            ObjectInputStream in = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));

            // Read from file
               // 1. Read double
             double doubleValue = input.readDouble();
             textArea.appendText("Double value: " + doubleValue);
             // 2. Read int array object
             int[] newNumbers = (int[]) (input.readObject());
             textArea.appendText("Integers: " + Arrays.toString(newNumbers));
             // 3. Read date object
             Date date = (java.util.Date) (input.readObject());
             textArea.appendText("DateTime: " + date);
             // 4. Read utf string
             String fileName = input.readUTF();      


              } catch(IOException exception) {
                    System.exit(0);
                }


        HBox hButtons = new HBox(read, write);
        VBox vProgram = new VBox(hButtons, textArea);



    }   
}

1 个答案:

答案 0 :(得分:0)

更改行

ObjectInputStream in = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));

try(ObjectInputStream input = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));){

(请参阅Toms评论,但我认为在发布之前代码操作不是问题,我认为这实际上是原始代码)

执行此操作后,您会注意到缺少一些右括号(在catch块后插入});

您需要捕获ClassNotFoundException并添加一些导入。