Java Serialisierung und Aufrufen von Dateien?

1 Antwort

Ja, du liest nicht die Daten aus der Datei, sondern die des Objektes, welches vom Programm erzeugt wird. Da du dies nun aber bereits weißt - wieso machst du es nicht anders? Wieso rufst du die readObject-Methode nirgendwo auf?

An sich sollte der Ablauf doch eigentlich ziemlich klar sein. In lesen wird erst das Objekt mit besagter Methode aus dem Stream geholt und danach folgt der print-Aufruf.

Halte deinen Code im Übrigen einheitlich. Halte Bezeichner eindeutig und aussagekräftig, verwende keinen Mix aus verschiedenen Sprachen (speichern, print, ...).

4

Okay, jetzt hab ich readObject() hinzugefügt. Ich tat dies nicht vorher weil ich dachte, ich müsste ein Argument in die Klammern hinzufügen (was natürlich nicht nötig ist.)

Danke ich werde deinen Rat beherzigen und anwenden.

Wenn ich noch eine Frage Dir stellen darf:

Wie kann ich nun die Daten im Objekt auswerten? Also zum Beispiel als Rückgabewert oder in der Konsole?

0
44
@Neodymidius

Die Methode readObject gibt dir ein Objekt zurück. Das castest du in deinen ursprünglichen Datentyp, danach hast du gewohnten Zugriff auf alle Methoden u.ä..

1
4
@regex9

Klar, macht Sinn. Eine Frage hätte ich aber noch :)

Wieso werden die Daten überschrieben wenn ich was anderes speichern will? Muss ich da noch was definieren, damit die alten Daten drin bleiben? Bzw. wie kann ich an die Liste wieder anknüpfen? Muss ich da den Konstruktor ändern?

0
44
@Neodymidius

Der ObjectOutputStream wird immer die Daten überschreiben, denn ihm fehlen die Mittel, zwischen verschiedenen Objekten zu unterscheiden. Der ObjectInputStream hingegen wird stets ein Objekt einlesen.

Lege eine Liste an Struktur-Objekten an und serialisiere diese.

0

java textdatei bestimmte zeile schreiben

hey leute... ich möchte in einer txtdatei eine bestimmte zeile ändern. aber wenn ich mein program starte dann gibt es eine NullPointerException... warum ??? und wie kann ich das lösen???

public MainClass() throws IOException{
    File file = new File("D:\\test.txt");

    writer(file, 5, "hallo zeile 5");    
}

public void writer(File file, int zeile, String text) throws IOException {
    int gelsesenezeilen = 0;
    String vorhandene_zeilen;
    BufferedWriter out = new BufferedWriter (new FileWriter (file));
    BufferedReader in = new BufferedReader(new FileReader(file));
    
    while(gelsesenezeilen != zeile-1){
        vorhandene_zeilen = in.readLine();
        out.write(vorhandene_zeilen);
        out.newLine();
        gelsesenezeilen++;
    }
    
    out.write(text);
    out.newLine();
    
    out.close();
    in.close();
}
...zur Frage

JAVA Sonnensystem Applet - kann mir jemand helfen?

Hallo ich soll in der Schule ein Java Applet projekt über das Sonnensystem erstellen.

Das Applet zeigt die Sonne im mittelpunkt und unsere Planeten die durch OOP erzeugt werden. Sie sollen sich um die Sonne Drehen.

Das Applet soll automatisch starten

ich habe schon etwas angefangen weis aber nicht wie ich die kreisbewegung hinbekomme das es automatisch startet.

Source code import java.applet.Applet; import java.awt.Color; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.ActionListener;

public class AppletPlanet extends Applet implements ActionListener { public Funktion Merkur; public Funktion Venus; public Funktion Erde; public Funktion Mars; public Funktion Jupiter; public Funktion Saturn; public Funktion Uranus; public Funktion Neptun;

public void init()
{   
    setSize (1350,690);                         //Gröse des Applets
    setBackground (Color.white);                //Hintergrundfarbe

//100% =Sonne gröstes objekt im Sonnensystem Mitte
//Da nur int als fillOval fubktioniert werden die durchmeser gerundet und mal 4 genommen

Merkur  = new Funktion  (4,553,343);    //int initDurchmesser, int initXPos, int initYPos
Venus   = new Funktion  (4,533,343);    //int initDurchmesser, int initXPos, int initYPos
Erde    = new Funktion  (4,513,343);    //int initDurchmesser, int initXPos, int initYPos
Mars    = new Funktion  (4,493,343);    //int initDurchmesser, int initXPos, int initYPos
Jupiter = new Funktion  (36,433,343);
Saturn  = new Funktion  (25,403,343);
Uranus  = new Funktion  (10,383,343);
Neptun  = new Funktion  (10,363,343);
}

    public void actionPerformed (ActionEvent event)
    {

         Merkur.bewegen();
         Venus.bewegen();
         Erde.bewegen();
         Mars.bewegen();
         Jupiter.bewegen();
         Saturn.bewegen();
         Uranus.bewegen();
         Venus.bewegen();
         repaint();

}

public void paint (Graphics g)
{       

    Merkur.zeichnen(g);
    Venus.zeichnen(g);
    Erde.zeichnen(g);
    Mars.zeichnen(g);
    Jupiter.zeichnen(g);
    Saturn.zeichnen(g);
    Uranus.zeichnen(g);
    Neptun.zeichnen(g);

}           

}

import java.awt.Color; import java.awt.Graphics;

public class Funktion extends Object { public int Durchmesser; //Durchmesser der Planeten
public int xPos,yPos; //Position oben links des Planeten public int radius; public int mitteX,mitteY; public double grad;

public Funktion(int initDurchmesser, int initXPos, int initYPos)        //Konstruktor
{
    Durchmesser=initDurchmesser;
    xPos=initXPos;
    yPos=initYPos;
    radius=Durchmesser/2;
    mitteX = xPos+radius;                   //Mittelpunk der Planeten   X coordinate
    mitteY = yPos-radius;                   //                      Y coordinate

}
public  void bewegen()
{   }

public void zeichnen(Graphics g) {
g.setColor(Color.yellow); g.fillOval(575, 245, 200, 200); //Die Sonne der mittelpunkt

    g.setColor(Color.black);
    g.fillOval(mitteX, mitteY, Durchmesser, Durchmesser);                   
}

}

...zur Frage

Java Figur springen lassen?

Hallo, wie kann ich meine Figur springen lassen?

Hier mein Code:

package pack1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class jump extends JPanel implements ActionListener, KeyListener{
    Timer t = new Timer(5, this);
    private static int x = 0, velX = 0, y = 390, velY = 0;
    public jump() {
        t.start();
        addKeyListener(this);
        setFocusable(true);
    }
    public void paintComponent(Graphics g) {
        super.paintComponent(g);
        g.setColor(Color.red);
        g.fillRect(x, y, 40, 40);
        g.setColor(Color.green);
        g.fillRect(0, 425, 500, 40);
    }
    public void actionPerformed(ActionEvent ae) {
        x = x + velX;
        y = y + velY;
        repaint();
    }
    public void keyPressed(KeyEvent e) {
        int c = e.getKeyCode();
        if(c == KeyEvent.VK_RIGHT) {
            velX = 3;
            velY = 0;
            
        }if(c == KeyEvent.VK_LEFT) {
            velX = -3;
            velY = 0;
        }

        
    }
    public void keyReleased(KeyEvent e) {
        int c = e.getKeyCode();
        if(c == KeyEvent.VK_RIGHT) {
            velX = 0;
            velY = 0;
            
        }
        
        
    }
    public void keyTyped(KeyEvent e) {
        
    
    }
    public static void main(String[] args) {
        jump j = new jump();
        JFrame f1 = new JFrame("Jump-and-run");
        f1.add(j);
        f1.setSize(500, 500);
        f1.setVisible(true);
    }
    
    
}

evtl. so ?:

public void key Pressed(KeyEvent e){
if(c == KeyEvent.VK_SPACE) {
    velX = 0;
        velY = 3;
            
}
}
public void keyReleased(KeyEvent e) {
if(c == KeyEvent.VK_SPACE) {
    velX = 0;
        velY = -3;
            
}
}
...zur Frage

Hilfe bei java.lang.NullPointerException?

Wir haben bei von der Uni eine Aufgabe bekommen, bei der schon ein teil vergegeben war. jedoch kommt bei mir in diesem teil ein Fehler den ich nicht ganz nachvollziehen kann.

Exception in thread "main" java.lang.NullPointerException

Wieso kommt sowas beim einlesen?

import java.io.*;

public class WoerterRaten {

public static void main(String[] args) throws IOException {
    Wort[] woerter = einlesen("beispiel.txt");
 }
    
public static Wort[] einlesen(String file) throws IOException {
    BufferedReader in = new BufferedReader(new FileReader(file));
    int anzahl = Integer.parseInt(in.readLine());
    Wort[] woerter = new Wort[anzahl];
    for(int i=0; i<anzahl; i++) {
        woerter[i] = new Wort(in.readLine());
    }
    return woerter;
}

}

...zur Frage

Wie verbinde ich Main-Klasse, Controller und fxml-Datei?

Hallo, das Problem steht in der Frage. Ich habe mit dem Scene Builder per Drag and Drop eine graphische Oberfläche erstellt. Die Fxml-Datei dazu hat der Scene Builder selbst erzeugt. Dazu habe ich noch eine Klasse Main, in der alles Nötige zu Stage, Scene etc. steht. Wenn ich nun aber die Main-Klasse starte, kommt eine lange Fehlermeldung wegen irgendwelcher Exceptions. Ich hoffe, jemand kann mir helfen. Den Quellcode findet ihr unten. Verständnisprobleme habe ich mit der Behandlung der Exceptions und folgenden Zeilen:

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("application.GUI.fxml"));
    Pane pane = loader.load();
    Controller controller = loader.getController();

Main-Klasse:

package application;

import java.io.FileInputStream; import java.io.IOException;

import javafx.application.Application; import javafx.event.EventHandler; import javafx.fxml.FXML; import javafx.fxml.FXMLLoader; import javafx.stage.Stage; import javafx.scene.Scene; import javafx.scene.control.Label; import javafx.scene.layout.BorderPane; import javafx.scene.layout.Pane; import javafx.scene.layout.VBox; import javafx.scene.input.MouseEvent;

public class Main extends Application {

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

@Override
public void start(Stage stage) throws Exception{

    stage.setResizable(true);
    
    VBox v = new VBox();

    FXMLLoader loader = new FXMLLoader();
    loader.setLocation(getClass().getResource("application.GUI.fxml"));
    Pane pane = loader.load();
    Controller controller = loader.getController();


    Scene scene = new Scene(v);

    stage.setScene(scene);
    
    stage.show();
}   

}

...zur Frage

Es öffnet sich kein Frame JAVA

Kann mir bitte einer sagen weshalb sich kein Frame öffnet?

package Tools;

import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JButton; import javax.swing.JSeparator; import javax.swing.JSpinner; import javax.swing.JSlider; import javax.swing.event.ChangeListener; import javax.swing.event.ChangeEvent; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import javax.swing.JTextField; import javax.swing.JLabel;

import Physik.Physics; import Tools.BeschleunigerRC;

public class BeschleunigerRC extends JPanel {

public static JPanel RcPanel;
private JTextField textField;
private JSpinner spinner_SpannungU;
private JSpinner spinner_Frequenzf;
protected Physics physics;
private Physics   ph;

public BeschleunigerRC() {

    final Physics ph = new Physics();
    RcPanel = new JPanel();

    JButton btnNewButton = new JButton("Pause");
    btnNewButton.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent arg0) {
        }
    });
    setLayout(null);


    btnNewButton.setBounds(119, 5, 61, 23);
    RcPanel.add(btnNewButton);

    spinner_SpannungU = new JSpinner();
    spinner_SpannungU.setBounds(10, 43, 44, 20);
    spinner_SpannungU.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
           ph.setSpannung(spinner_SpannungU.getValue()); 
        }
    });
    RcPanel.add(spinner_SpannungU);

    spinner_Frequenzf = new JSpinner();
    spinner_Frequenzf.setBounds(10, 74, 44, 20);
    spinner_Frequenzf.addChangeListener(new ChangeListener() {
        public void stateChanged(ChangeEvent e) {
           ph.setFrequenz(spinner_Frequenzf.getValue()); 
        }
    });
    RcPanel.add(spinner_Frequenzf);

    JSpinner spinner_2 = new JSpinner();
    spinner_2.setBounds(10, 105, 44, 20);
    RcPanel.add(spinner_2);


}

}

...zur Frage

Was möchtest Du wissen?