2016-04-01 6 views
-1

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); 



    } 
} 
+0

Hat der Code für die "Lese" -Aktion einen "Versuch", mit diesem "Fang" zu gehen? – bradimus

+0

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

Antwort

0

Änderung der Linie

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

zu

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

(siehe Toms Kommentar, aber ich denke, dass es vor der Veröffentlichung kein Problem mit dem Code-Manipulation war, ich glaube, das ist eigentlich das Original Code)

nachdem Sie das getan haben, werden Sie feststellen, dass einige schließende Klammern fehlen (geben Sie 0 einnach catch block)

Sie müssen ClassNotFoundException fangen und einige Importe hinzufügen.

+0

fangen Sie' ClassNotFoundException' entfernt? –

Verwandte Themen