Guten Tag. Ich habe eine Frage zu einer Aufgabe. Es geht um eine Wortliste für ein Spiel. Man soll Wörter in eine Datei speichern koennen und die Anzahl der Wörter auch. Dazu soll man einen eigenen Editor erstellen. Ich hab auch schon einige Themen darüber im Forum gefunden aber ich komme trotzdem nicht weiter. Ich habe jetzt schon 1000 verschiedene Sachen ausprobiert und es kommen nur Fehlermeldungen. Ich bin der Meinung der Code muesste jetzt eigentlich funktionieren. Warum gibt er die Fehlermeldung beim klicken des lesen oder schreiben Button aus? Was habe ich übersehen ?Hier mein Code :
und hier die Fehlermeldung:
Java:
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.RandomAccessFile;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.JLabel;
public class Text1 extends JFrame {
/**
*
*/
private static final long serialVersionUID = 1L;
//für das Eingabefeld
private JTextArea feld;
private JTextField eingabe;
private JLabel anzeige, anzahlAnzeige, anzeigeEingabe;
private int woerterAnzahl;
//für die Schaltflächen
private JButton einlesen, beenden, schreiben;
//die innere Klasse für den ActionListener
class MeinListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
//wurde auf Lesen geklickt?
if (e.getActionCommand().equals("lesen"))
//dann die Datei einlesen
dateiLesen();
//wurde auf Schreiben geklickt?
if (e.getActionCommand().equals("schreiben"))
//dann die Datei schreiben
dateiSchreiben();
//wurde auf Beenden geklickt?
if (e.getActionCommand().equals("ende"))
System.exit(0);
}
}
//der Konstruktor
public Text1(String titel) {
super(titel);
//für das Panel mit den Schaltflächen
JPanel tempPanel;
JPanel tempPanel2;
feld = new JTextArea();
feld.setEditable(false);
eingabe = new JTextField();
//die Schaltflächen
einlesen = new JButton("Wörter anzeigen");
einlesen.setActionCommand("lesen");
schreiben = new JButton("Wörter speichern");
schreiben.setActionCommand("schreiben");
beenden = new JButton("Beenden");
beenden.setActionCommand("ende");
anzeige = new JLabel("Anzahl der Wörter:");
anzahlAnzeige =new JLabel("");
anzeigeEingabe =new JLabel("Wort eingeben:");
MeinListener listener = new MeinListener();
einlesen.addActionListener(listener);
schreiben.addActionListener(listener);
beenden.addActionListener(listener);
//ein BorderLayout anwenden
setLayout(new BorderLayout());
//das Eingabefeld mit Scrollbars
add(new JScrollPane(feld), BorderLayout.CENTER);
//ein Panel für die Schaltflächen
tempPanel = new JPanel();
tempPanel.setLayout(new FlowLayout(FlowLayout.LEFT));
tempPanel.add(einlesen);
tempPanel.add(schreiben);
tempPanel.add(beenden);
tempPanel2 = new JPanel();
tempPanel2.setLayout(new GridLayout());
tempPanel2.add(anzeige);
tempPanel2.add(anzahlAnzeige);
tempPanel2.add(anzeigeEingabe);
tempPanel2.add(eingabe);
add(tempPanel,BorderLayout.SOUTH);
add(tempPanel2,BorderLayout.NORTH);
//Größe setzen, Standard-Verhalten festlegen und anzeigen
setMinimumSize(new Dimension(500,400));
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setVisible(true);
}
//die Methode zum Lesen
private void dateiLesen() {
try (RandomAccessFile datei = new RandomAccessFile("daten.txt", "r")) {
datei.seek(0);
woerterAnzahl=datei.readInt();
StringBuilder wort = new StringBuilder();
for (int i=0; i<woerterAnzahl; i++);
wort.append(datei.readUTF()).append("\n");
feld.setText(wort.toString());
anzahlAnzeige.setText(""+woerterAnzahl);
}
catch (Exception e) {
e.printStackTrace();
}
}
//die Methode zum Schreiben
private void dateiSchreiben() {
try (RandomAccessFile datei = new RandomAccessFile("daten.txt", "rw")) {
String wort=eingabe.getText();
datei.seek(0);
woerterAnzahl=datei.readInt();
datei.seek(0);
datei.writeInt(woerterAnzahl+1);
datei.seek(datei.length());
datei.writeUTF(wort);
eingabe.setText("");
dateiLesen();
}
catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new Text1("Wörterlisten Editor Aufgabe.1");
}
}
und hier die Fehlermeldung:
Java:
java.io.EOFException
at java.base/java.io.RandomAccessFile.readInt(RandomAccessFile.java:842)
at de.fernschulen.text1.Text1.dateiLesen(Text1.java:120)
at de.fernschulen.text1.Text1$MeinListener.actionPerformed(Text1.java:42)
at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
at java.desktop/javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2313)
at java.desktop/javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:405)
at java.desktop/javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:262)
at java.desktop/javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:279)
at java.desktop/java.awt.Component.processMouseEvent(Component.java:6626)
at java.desktop/javax.swing.JComponent.processMouseEvent(JComponent.java:3389)
at java.desktop/java.awt.Component.processEvent(Component.java:6391)
at java.desktop/java.awt.Container.processEvent(Container.java:2266)
at java.desktop/java.awt.Component.dispatchEventImpl(Component.java:5001)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2324)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
at java.desktop/java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4948)
at java.desktop/java.awt.LightweightDispatcher.processMouseEvent(Container.java:4575)
at java.desktop/java.awt.LightweightDispatcher.dispatchEvent(Container.java:4516)
at java.desktop/java.awt.Container.dispatchEventImpl(Container.java:2310)
at java.desktop/java.awt.Window.dispatchEventImpl(Window.java:2780)
at java.desktop/java.awt.Component.dispatchEvent(Component.java:4833)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:775)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:720)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:714)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:97)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:747)
at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:745)
at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:744)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)