指令说:我需要创建一个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);
}
}
答案 0 :(得分:0)
更改行
ObjectInputStream in = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));
到
try(ObjectInputStream input = new ObjectInputStream(new FileInputStream("Exercise17_05.dat"));){
(请参阅Toms评论,但我认为在发布之前代码操作不是问题,我认为这实际上是原始代码)
执行此操作后,您会注意到缺少一些右括号(在catch块后插入});
)
您需要捕获ClassNotFoundException
并添加一些导入。