Die Anweisung besagt: Ich muss eine JavaFX-Anwendung erstellen, in der ein Feld mit fünf int-Werten 1,2,3,4 und 5, ein Date-Objekt für die aktuelle Zeit und ein Doppelwert 5.5. in eine Datei namens Exercise17_05.dat. Schreiben Sie dann eine Methode in das Programm, das Exercise17_05.dat öffnet, liest die Daten und zeigt sie im Befehlsfenster an. Zusätzlich haben Sie eine Schaltfläche mit der Beschriftung Lesen, die bei Betätigung das Programm liest und den Inhalt von Exercise17_05.dat (erstellt durch den Schreibvorgang) anzeigt. Verwenden Sie einen TextArea, um die Ergebnisse anzuzeigen und haben die Textfarbe blau und den Hintergrund grauDas Speichern von Objekten in einer Java-Datei funktioniert nicht.
Ich fühle mich wie ich bin in der Nähe, aber ich bekomme diesen Fehler "Der Zieltyp dieses Ausdrucks muss eine funktionale Schnittstelle sein". Die Javafx-Box öffnet sich wegen des Fehlers nicht einmal, sodass ich meinen Fortschritt nicht wirklich überprüfen kann. Was habe ich falsch gemacht?
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);
}
}
Hat der Code für die "Lese" -Aktion einen "Versuch", mit diesem "Fang" zu gehen? – bradimus
Und das Problem tritt auf, wo? Und nehmen Sie bitte mehr Vorsicht bei der Manipulation Ihres Codes, bevor Sie ihn posten: Er hat diesen 'try' Teil in' read.setOnAction (e -> {'. – Tom