Swing Methode datenLesen() greift auf catchBlock zu?

Michelangelo

Mitglied
Hallo!
ich habe folgendes Problem und benötige einen Denkanstoß...

Ich habe einen Editor erzeugt, der mittels RandomAccessFile Daten schreiben schreiben und Lesen soll.
Dies habe ich natürlich in 2 Methoden getrennt.

Das Schreiben funktioniert wie gewünscht, jedoch die LesenMethode nicht so wie ich es mir vorstelle(Nur der Exception Handler wird ausgeführt).....

Das Lesen der Daten soll über ein JLabel ausgegeben werden und hier liegt auch der Fehler.

Java:
package de.fernschulen.hangman;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class WoerterListe extends JFrame {
   
    private static final long serialVersionUID = -4744490797339378378L;

    private JButton lesen, einschreiben;
   
    private JTextField feld;

    private int anzahlWoerter =0;
       
    class Meinlistener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("lesen"))
                datenLesen();
            if(e.getActionCommand().equals("schreiben")) {
                datenSchreiben();
                }
            }
        }
    public WoerterListe(String text) {
       
        super(text);
        //Prüfung ob die Datei schon existiert
        File datei = new File("woerter.bin");
        if(datei.exists() == false)
            //Sonst erzeugen
            datenSchreiben();
       
       
        //Das Layout setzen
        setLayout(new GridLayout(0,2));
       
        //Das Textfeld erzeugen und hinzufügen
        feld = new JTextField();
        add(new JLabel("schreibe ein Wort: "));
        add(feld);
       
        /*lesenZahl = new JLabel("");
        lesenWort = new JLabel("");
        add(lesenWort);
        add(lesenZahl);*/
       
        //Die Schaltflächen erzeugen und hizufügen
        lesen = new JButton("Einlesen");
        einschreiben = new JButton("Schreiben");
        add(einschreiben);
        add(lesen);
   
        //Die Schnittstelle erzeugen und
        //den ActionCommand setzen für die Schaltflächen
        Meinlistener listener = new Meinlistener();
        einschreiben.setActionCommand("schreiben");
        einschreiben.addActionListener(listener);
        lesen.setActionCommand("lesen");
        lesen.addActionListener(listener);
       
        //Das Fenster packen
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    private void datenSchreiben() {
        if(feld.getText().isEmpty()) {
            return;
        }
        try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","rw")){
            anzahlWoerter++;
            datei.writeInt(anzahlWoerter);
            datei.seek(datei.length());
            datei.writeUTF(feld.getText());
            feld.setText("");
            datei.close();
            }
        catch(IOException e) {
            JOptionPane.showMessageDialog(this, "Problem beim schreiben");
        }
    }  
    private void datenLesen() {
            try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","r")) {
                //den Zeiger auf das 4. Byte setzen, da erst am dem 5. Byte gelesen
                //werden soll, weil in den Bytes 1 - 4 die Anzahl der Wörter im Typen Int
                //abgespeichert wird
                datei.seek(4);
               
                //Mit der While-Schleife wird die Ausgabe gesteuert
                //solange die aktuelle Position kleiner ist als die
                //länge der Datei wird der Index ausgelesen
                //und das Wort ausgegeben
                while(datei.getFilePointer() < datei.length()) {
                   
                    add(new JLabel(datei.readInt() + ". Wort: " + feld.getText()));
                    add(new JLabel(datei.readUTF()));
                    //das Fenster neu packen
                    pack();
                }
                datei.close();
            }
                catch (IOException e) {
                JOptionPane.showMessageDialog(this, "Problem beim einlesen");
                }
        }
    public static void main(String[] args) {
        new WoerterListe("Die Wörter Liste");

    }

}
 

KonradN

Super-Moderator
Mitarbeiter
Bitte gewöhne Dir an, bei Exceptions auch wirklich die Informationen der Exception auszugeben. Also
a) die Exception Message
b) den Stacktrace

Du bekommst einen Fehler und willst ja wissen, was für ein Fehler aufgetreten ist.
 

Michelangelo

Mitglied
Bitte gewöhne Dir an, bei Exceptions auch wirklich die Informationen der Exception auszugeben. Also
a) die Exception Message
b) den Stacktrace

Du bekommst einen Fehler und willst ja wissen, was für ein Fehler aufgetreten ist.
Lieber KonradN,
ich bedanke mich für deine Antwort :) . Den Stacktrace habe ich eingebaut und habe nochmal das Programm gestartet.
der Korrigierte Quellcode sieht nun so aus:
Java:
private void datenLesen() {
            try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","r")) {
                //den Zeiger auf das 4. Byte setzen, da erst am dem 5. Byte gelesen
                //werden soll, weil in den Bytes 1 - 4 die Anzahl der Wörter im Typen Int
                //abgespeichert wird
                
                datei.seek(0);
                //Mit der While-Schleife wird die Ausgabe gesteuert
                //solange die aktuelle Position kleiner ist als die
                //länge der Datei wird der Index ausgelesen
                //und das Wort ausgegeben
                while(datei.getFilePointer() < datei.length()) {
                    anzahlWoerter++;
                    add(new JLabel(Integer.toString(anzahlWoerter,datei.readInt())));
                    add(new JLabel(datei.readUTF()));
                    //das Fenster neu packen
                    pack();
                }
                }
                catch (IOException e) {
                JOptionPane.showMessageDialog(this, "Beim einlesen ist ein Problem aufgetreten");
                 e.printStackTrace();
                }
        }
Leider bin ich nicht ganz schlau aus der Fehlermeldung geworden.

Grüße
 

Michelangelo

Mitglied
Dann gibt uns einfach mal den ganzen Stacktrace - vielleicht werden wir ja schlau daraus.
Java:
java.io.EOFException
    at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:471)
    at java.base/java.io.DataInputStream.readUTF(DataInputStream.java:614)
    at java.base/java.io.RandomAccessFile.readUTF(RandomAccessFile.java:1004)
    at de.fernschulen.hangman.WoerterListe.datenLesen(WoerterListe.java:109)
    at de.fernschulen.hangman.WoerterListe$Meinlistener.actionPerformed(WoerterListe.java:32)
    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:773)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:716)
    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:746)
    at java.desktop/java.awt.EventQueue$5.run(EventQueue.java:744)
    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:743)
    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)
 

KonradN

Super-Moderator
Mitarbeiter
Die Exception besagt, dass Du die Datei falsch liest, denn Du versuchst einen UTF String zu lesen, wo vermutlich schlicht keiner steht.

Und Du schreibst ja auch:
An den Kopf der Datei ein int
Dann nur UTF Strings.

Du liest aber:
int, UTF String, int, UTF String, ....

Das passt so also schlicht nicht zusammen. Beim lesen darfst Du dann auch nur den int lesen (oder überspringen - das ist egal) und dann die UTF Strings nacheinander lesen.
 

Michelangelo

Mitglied
Die Exception besagt, dass Du die Datei falsch liest, denn Du versuchst einen UTF String zu lesen, wo vermutlich schlicht keiner steht.

Und Du schreibst ja auch:
An den Kopf der Datei ein int
Dann nur UTF Strings.

Du liest aber:
int, UTF String, int, UTF String, ....

Das passt so also schlicht nicht zusammen. Beim lesen darfst Du dann auch nur den int lesen (oder überspringen - das ist egal) und dann die UTF Strings nacheinander lesen.
Danke für die schnelle Antwort!
ich lese gerade in meinem Studienheft etwas nach(ist hier auch oft nicht gut beschrieben)
Werde deinen Tip gleich versuchen um zu setzen. :)
 

Michelangelo

Mitglied
Lieber KonradN,
ich habe das Problem lösen können.
Dein Denkanstoß hat mir sehr weitergeholfen und mir ist direkt ein Licht aufgegangen :)
Java:
package de.fernschulen.hangman;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class WoerterListe extends JFrame {
    
    private static final long serialVersionUID = -4744490797339378378L;

    private JButton lesen, einschreiben;
    
    private JTextField feld;

    private int anzahlWoerter =0;
        
    class Meinlistener implements ActionListener{

        @Override
        public void actionPerformed(ActionEvent e) {
            if(e.getActionCommand().equals("lesen"))
                datenLesen();
            if(e.getActionCommand().equals("schreiben")) {
                datenSchreiben();
                }
            }
        }
    public WoerterListe(String text) {
        
        super(text);
        //Prüfung ob die Datei schon existiert
        File datei = new File("woerter.bin");
        if(datei.exists() == false)
            //Sonst erzeugen
            datenSchreiben();
        
        
        //Das Layout setzen
        setLayout(new GridLayout(0,2));
        
        //Das Textfeld erzeugen und hinzufügen
        feld = new JTextField();
        add(new JLabel("schreibe ein Wort: "));
        add(feld);
        
        /*lesenZahl = new JLabel("");
        lesenWort = new JLabel("");
        add(lesenWort);
        add(lesenZahl);*/
        
        //Die Schaltflächen erzeugen und hizufügen
        lesen = new JButton("Einlesen");
        einschreiben = new JButton("Schreiben");
        add(einschreiben);
        add(lesen);
    
        //Die Schnittstelle erzeugen und
        //den ActionCommand setzen für die Schaltflächen
        Meinlistener listener = new Meinlistener();
        einschreiben.setActionCommand("schreiben");
        einschreiben.addActionListener(listener);
        lesen.setActionCommand("lesen");
        lesen.addActionListener(listener);
        
        //Das Fenster packen
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
    private void datenSchreiben() {
        if(feld.getText().isEmpty()) {
            return;
        }
        try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","rw")){
            datei.writeInt(anzahlWoerter);
            datei.seek(datei.length());
            datei.writeUTF(feld.getText());
            feld.setText("");
            datei.close();
            }
        catch(IOException e) {
            JOptionPane.showMessageDialog(this, "Problem beim schreiben");
        }
    }   
    private void datenLesen() {
            try(RandomAccessFile datei = new RandomAccessFile("woerter.bin","r")) {
                //den Zeiger auf das 4. Byte setzen, da erst am dem 5. Byte gelesen
                //werden soll, weil in den Bytes 1 - 4 die Anzahl der Wörter im Typen Int
                //abgespeichert wird
                datei.seek(4);
                
                //Mit der While-Schleife wird die Ausgabe gesteuert
                //solange die aktuelle Position kleiner ist als die
                //länge der Datei wird der Index ausgelesen
                //und das Wort ausgegeben
                while(datei.getFilePointer() < datei.length()) {
                    anzahlWoerter++;
                    add(new JLabel(Integer.toString(anzahlWoerter)));
                    add(new JLabel(datei.readUTF()));
                    //das Fenster neu packen
                    pack();
                }
                }
                catch (IOException e) {
                JOptionPane.showMessageDialog(this, "Beim einlesen ist ein Problem aufgetreten");
                 e.printStackTrace();
                }
        }
    public static void main(String[] args) {
        new WoerterListe("Die Wörter Liste");

    }

}
.
 

Grauzev

Mitglied
Hallo zusammen. Ich habe gleiche Aufgabe, aber verstehe nicht wo liegt mein Problem. Gleich am Start kriege ich eine Meldung das mit datenLesen stimmt etwas nicht. Könntet mir jemand damit helfen???

die Aufgabe:
Erstellen Sie einen Editor, mit dem Sie eine Wortliste für das Hangman-Spiel in einer Datei ablegen können. Speichern Sie in dieser Datei nicht nur die Wörter an sich, sondern auch die Anzahl der gespeicherten Wörter.

Für das Speichern reicht es aus, wenn Sie jeweils ein neues Wort am Ende der Datei anhängen. Eine nachträgliche Änderung von gespeicherten Wörtern ist nicht erforderlich. Der Editor soll aber die bereits vorhandenen Wörter anzeigen können.

Wie Sie den Editor im Detail umsetzen und welche Bibliothek Sie für die Oberfläche verwenden, bleibt Ihnen überlassen. Dokumentieren Sie Ihre Lösung aber bitte ausführlich.

Java:
package einsendeaufgabe_15d;

import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Editor extends JFrame {

    //automatisch über Eclipse ergänzt
    private static final long serialVersionUID = 4017712910389450429L;
    //für die Schaltflächen
    private JButton schalteflaecheSchreiben, schalteflaecheBeenden, schalteflaecheLaden;
    //für das Eingabefeld
    private JTextField neueWorteEingabe;
    //für das Ausgabefeld
    private JTextArea feld;
    //für die Anzahl der Worter
    private int worteAnzahl;
    //für die neue Worte
    private String neueWorte;
    //für den Dateinamen
    private String dateiName;
    //ein Label für die Anzahl der Worte
    private JLabel anzahlZeiger;
    //Panel für die Ausgabe
    private JPanel ausgabePanel;
   
    //die innere Klasse für den ActionListener
    class MeinListener implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent e) {
            //wurde auf Schreiben geklickt?
            if (e.getActionCommand().equals("schreiben"))
                //dann die Daten in Datei speichern
                worteSpeichern(neueWorte);
            //wurde auf Laden geklickt?
            if (e.getActionCommand().equals("laden"))
                //dann die Daten aus Datei laden
                datenLesen();
            //wurde auf Beenden geklickt?
            if (e.getActionCommand().equals("ende"))
                System.exit(0);
        }
    }
   
    //die Methode erzeugt ein Panel für das Eingabe den Wörter und die Schalteflächen
    private JPanel panelErzeugen() {
        ausgabePanel = new JPanel();
        //es enthält ein Eingabefeld und die Schaltflächen
        neueWorteEingabe = new JTextField("");
        schalteflaecheSchreiben = new JButton("Schreiben");
        schalteflaecheSchreiben.setActionCommand("schreiben");
        schalteflaecheLaden = new JButton("Laden");
        schalteflaecheLaden.setActionCommand("laden");
        schalteflaecheBeenden = new JButton("Beenden");
        schalteflaecheBeenden.setActionCommand("ende");
       
        //das Panel bekommt ein GridLayout mit zwei spalten
        ausgabePanel.setLayout(new GridLayout(0, 2, 5, 5));
        //ein beschreibendes Label für die Eingabe
        ausgabePanel.add(new JLabel("Neue Worte: "));
        //das Eingabefeld
        ausgabePanel.add(neueWorteEingabe);
        //die Schaltflächen
        ausgabePanel.add(schalteflaecheSchreiben);
        //ein Label für Anzahl der Worte
        ausgabePanel.add(anzahlZeiger = new JLabel("Das Wort No: " + worteAnzahl));
        //die Schaltflächen
        ausgabePanel.add(schalteflaecheLaden);
        ausgabePanel.add(schalteflaecheBeenden);
       
        //das Panel zurückliefern
        return ausgabePanel;
    }
   
    //der Konstruktor
    public Editor(String titel) {
        super(titel);
       
        //am Anfang haben wir noch keine Worter
        //worteAnzahl = 0;
        //die DateiName setzen
        dateiName = "worteliste.dat";
       
        //ein Ausgabefeld erzeugen
        feld = new JTextArea();
        //ein Panel
        JPanel panelEingabe;
        //panel über die Methode erstellen
        panelEingabe = panelErzeugen();
       
        //ein GridLayout mit einem Spalten
        setLayout(new GridLayout(0, 1));
       
        //das Panel und Ausgabefeld hinzufügen
        add(panelEingabe);
        add(feld);
       
        //gibt es die Datei worteliste.bin schon?
        File datei = new File(dateiName);
        //
        if (datei.exists() == true)
            datenLesen();
       
        //mit Listener verbinden
        MeinListener listener = new MeinListener();
        schalteflaecheSchreiben.addActionListener(listener);
        schalteflaecheLaden.addActionListener(listener);
        schalteflaecheBeenden.addActionListener(listener);
       
        //Größe setzen, Standart-Verhalten festlegen und anzeigen
        pack();
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setVisible(true);
    }
   
    //die Methode zum Lesen
    private void datenLesen() {
        String anzahl = "";
        //die Datei zum Lesen öffnen
        try (RandomAccessFile datei = new RandomAccessFile(dateiName, "r")) {
           
            //die Anzahl der Worte lesen
            worteAnzahl = datei.readInt();
            //die gesamte Datei durchsuchen
            while (datei.getFilePointer() < datei.length()) {
               
                //die Anzahl anzeigen
                anzahl = Integer.toString(datei.readInt());
                //das Wort Lesen
                neueWorte = anzahl + ". " + neueWorte + datei.readUTF() + "\n";
                //die Anzahl und Worte anzeigen
                feld.setText(neueWorte);
                pack();
            }
            datei.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten");
            e.printStackTrace();
        }
    }
   
    //die Methode zum Schreiben
    private void datenSchreiben() {
       
        //die Datei zum Lesen und Schreiben öffnen
        try (RandomAccessFile datei = new RandomAccessFile(dateiName, "rw")) {
            worteAnzahl++;
            //die Datein in die Datei schreiben
            datei.writeInt(worteAnzahl);
            datei.seek(datei.length());
            //datei.writeInt(worteAnzahl);
            datei.writeUTF(neueWorte);
            datei.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Beim Schreiben ist ein Problem aufgetreten");
        }
       
        neueWorteEingabe.setText("");
        anzahlZeiger.setText("Wort No: " + (Integer.toString(worteAnzahl)));
       
    }
   
    //die Methode speichert neue Worte
    private void worteSpeichern(String worte) {
       
        if (neueWorteEingabe.getText().isEmpty())
            return;
       
        worte = neueWorteEingabe.getText();
        neueWorte = worte;
       
        datenSchreiben();
    }

    public static void main(String[] args) {
        new Editor("Editor für Hangman-Spiel");
    }
}

da habe ich noch was von Exception:
Code:
java.io.EOFException
    at java.base/java.io.RandomAccessFile.readFully(RandomAccessFile.java:470)
    at java.base/java.io.DataInputStream.readUTF(DataInputStream.java:615)
    at java.base/java.io.RandomAccessFile.readUTF(RandomAccessFile.java:1003)
    at einsendeaufgabe_15d.Editor.datenLesen(Editor.java:143)
    at einsendeaufgabe_15d.Editor.<init>(Editor.java:115)
    at einsendeaufgabe_15d.Editor.main(Editor.java:189)

Für jede Hilfe würde ich sehr Dankbar
 
Zuletzt bearbeitet:

KonradN

Super-Moderator
Mitarbeiter
Überlege Dir genau, was Du wie schreibst. Wie ist Deine Datei aufgebaut?

Und dann überlege Dir, was Du genau einliest. Spiel es auf einem Zettel durch!

Du kannst auch hier den Thread einmal lesen - Du hast das gleiche Problem, dass auch @Michelangelo zuvor hatte.
 

Blender3D

Top Contributor
Lieber KonradN,
ich habe das Problem lösen können.
Dein Denkanstoß hat mir sehr weitergeholfen und mir ist direkt ein Licht aufgegangen :)
Also der Code funktioniert aber nicht wirklich.
Hier ein kleines Update dazu.
Java:
import java.awt.GridLayout;
import java.io.File;
import java.io.IOException;
import java.io.RandomAccessFile;

import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class WoerterListe extends JFrame {

    private static final long serialVersionUID = -4744490797339378378L;

    private JButton ok = new JButton("ok");;
    private JTextField eingabe = new JTextField();;
    private JLabel anzahl = erzeugeLabel("0");

    private int anzahlWoerter = 0;
    private final static String FILENAME = "woerter.bin";

    public static void main(String[] args) {
        new WoerterListe("Die Wörter Liste");
    }

    public WoerterListe(String text) {
        super(text);
        setLayout(new GridLayout(0, 2)); // Das Layout setzen
        // GUI Komponenten hinzufuegen
        ok.setFocusable(false);
        anzahl.setBorder(BorderFactory.createBevelBorder(BevelBorder.RAISED));
        add(new JLabel("schreibe ein Wort: "));
        add(eingabe);
        add(anzahl);
        add(ok);
        ok.addActionListener(e -> { // Den Button Listener setzen
            String wort = datenSchreiben();
            if (wort != null) {
                eintragHinzufuegen(wort);
                updateAnzahlWoerter();
            }
        });
        getRootPane().setDefaultButton(ok);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        datenLesen();
        updateAnzahlWoerter();
        pack();
        setVisible(true);
    }

    private void datenLesen() {
        if (!(new File(FILENAME).exists()))
            return;
        try (RandomAccessFile datei = new RandomAccessFile(FILENAME, "r")) {
            // Mit der While-Schleife wird die Ausgabe gesteuert
            // solange die aktuelle Position kleiner ist als die
            // länge der Datei wird der Index ausgelesen
            // und das Wort ausgegeben
            while (datei.getFilePointer() < datei.length())
                eintragHinzufuegen(datei.readUTF());
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Beim einlesen ist ein Problem aufgetreten");
            e.printStackTrace();
        }
    }

    private String datenSchreiben() {
        String wort = eingabe.getText();
        if (wort.isEmpty())
            return null;
        try (RandomAccessFile datei = new RandomAccessFile(FILENAME, "rw")) {
            datei.seek(datei.length());
            datei.writeUTF(eingabe.getText());
            eingabe.setText("");
            datei.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Problem beim schreiben");
        }
        return wort;
    }

    private void eintragHinzufuegen(String wort) {
        add(erzeugeLabel(Integer.toString(++anzahlWoerter)));
        add(erzeugeLabel(wort));
        pack();// das Fenster neu packen
    }

    public JLabel erzeugeLabel(String wort) {
        JLabel label = new JLabel(wort);
        label.setHorizontalAlignment(JLabel.CENTER);
        return label;
    }

    public void updateAnzahlWoerter() {
        anzahl.setText(anzahlWoerter + "");
    }

}
 

KonradN

Super-Moderator
Mitarbeiter
Hier ein kleines Update dazu.
Aber da hast Du die Anforderung, dass am Anfang die Anzahl der Worte steht, nicht erfüllt.

Und das dürfte der Code vom TE zumindest berücksichtigt haben.

Und wieso kannst Du nicht schreiben, was das Problem war? Der Code vom TE in dem Post war - was das Lesen und Schreiben angeht - korrekt.

Das Problem ist nur im Konstruktor - wenn die Datei nicht vorhanden ist, wird datenSpeichern aufgerufen:
Java:
        if(datei.exists() == false)
            //Sonst erzeugen
            datenSchreiben();

Das aber zu einem Zeitpunkt, bei dem die UI noch nicht erstellt wurde. Den Code einfach ans Ende vom Konstruktor setzen und schon funktioniert auch das ganze Programm des TE.
 

KonradN

Super-Moderator
Mitarbeiter
Aber wenn man so einen bestehenden Code anschaut, dann machen wir einmal eine genauere Analyse der Funktionalität.

Und was noch etwas optimiert werden muss ist das mit der Anzahl der Wörter. Das erfasst er nicht richtig mit dem laden / speichern und so und da kommt es zu falschen Werten. Was ich z.B. bei mir hatte:
Code:
00000000: 0000 0002 0003 6161 6100 0362 6262 0003  ......aaa..bbb..
00000010: 6363 630a                                ccc.

Man kann also erkennen: Erst die 8 Byte des Integer - da ist also die Anzahl Wörter erfasst: 2
Dann kommt der erste UTF String: 0003 = 3 Zeichen lang: 616161 -> "aaa"
Dann kommt der zweite UTF STring: 0003 = 3 Zeichen lang: 626262 -> "bbb"
Dann kommt noch ein UTF String: 0003 636363 -> "ccc"
Also ganz klar 3 Strings sind drin (und werden auch geladen), aber die Anzahl, die angegeben wurde, ist 2.

Und beim Laden wir die Anzeige immer weiter gezählt:
Er hatte bei mir das aaa und bbb schon drin und hast das geladen:
1 aaa
2 bbb

Dann habe ich ein ccc geschrieben und erneut auf Laden gedrückt:
1 aaa
2 bbb
3 aaa
4 bbb
5 ccc

Noch einmal auf laden drücken und man bekommt:
1 aaa
2 bbb
3 aaa
4 bbb
5 ccc
6 aaa
7 bbb
8 ccc

Beim laden muss natürlich die Anzahl Worte gelesen und gesetzt werden und dann von 1 anfangend gelesen und dann nicht einfach angehängt werden sondern es muss erst leer gemacht werden und dann nur das gelesene angezeigt werden ...


Das sind aber Folgeprobleme. Das eigentliche Speichern und Laden ist erfolgreich umgesetzt worden. Beim speichern wird ein UTF String angehängt und die Anzahl am Start überschrieben. Und beim Laden wird erst die Anzahl geladen und dann alle Strings nacheinander gelesen. Das Format der Datei ist also korrekt.
 

Grauzev

Mitglied
Hallo Konrad! Vielen Dank für Deine Hilfe! Ich habe meinen Code etwa geändert und jetzt schreiben und lesen funktionieren, aber dieses Problem, was Du davor erzählt, hat bei mir auch erscheint :
Und beim Laden wir die Anzeige immer weiter gezählt:
Er hatte bei mir das aaa und bbb schon drin und hast das geladen:
1 aaa
2 bbb

Dann habe ich ein ccc geschrieben und erneut auf Laden gedrückt:
1 aaa
2 bbb
3 aaa
4 bbb
5 ccc

Noch einmal auf laden drücken und man bekommt:
1 aaa
2 bbb
3 aaa
4 bbb
5 ccc
6 aaa
7 bbb
8 ccc

Java:
//die Methode zum Lesen
    private void datenLesen() {
        //die Datei zum Lesen öffnen
        try (RandomAccessFile datei = new RandomAccessFile(dateiName, "r")) {
            datei.seek(4);
            //die gesamte Datei durchsuchen
            while (datei.getFilePointer() < datei.length()) {
                //erhöht Worteanzahl um 1
                worteAnzahl++;
                //zuerst Worteanzahl einlesen
                add(new JLabel(Integer.toString(worteAnzahl)));
                //dann Wort
                add(new JLabel(datei.readUTF()));
                pack();
            }
            datei.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Beim Laden ist ein Problem aufgetreten");
            e.printStackTrace();
        }
    }
    
    //die Methode zum Schreiben
    private void datenSchreiben() {
        
        //die Datei zum Lesen und Schreiben öffnen
        try (RandomAccessFile datei = new RandomAccessFile(dateiName, "rw")) {
            datei.writeInt(worteAnzahl);
            //die Datein in die Datei schreiben
            datei.seek(datei.length());
            //datei.writeInt(worteAnzahl);
            datei.writeUTF(neueWorte);
            datei.close();
        } catch (IOException e) {
            JOptionPane.showMessageDialog(this, "Beim Schreiben ist ein Problem aufgetreten");
        }
        
        neueWorteEingabe.setText("");
        
    }

und habe ich noch eine Frage, was für Unterschied haben die Dateiformate .dat und .bin in so einem Beispiel? Spielt es eine große Rolle was werde ich benutzen?
 

KonradN

Super-Moderator
Mitarbeiter
Fangen wir mit dem Leichten an:
was für Unterschied haben die Dateiformate .dat und .bin in so einem Beispiel?
Du vergibst einfach irgend einen Namen. Die Endung ist dabei eigentlich egal - sollte nur eben keine Endung sein, mit der man etwas Anderes verbindet. Aber für die Programmierung kannst Du es beliebig nennen - auch .txt oder so. In einem Texteditor öffnen macht aber wenig Sinn. Bei .bin und .dat erwartet man binary Daten und daher macht es Sinn, sowas zu nutzen.

Also das datenSchreiben ist soweit ok denke ich mal. Du setzt halt die Anzahl eins hoch und schreibst diese.

Beim Lesen musst Du aber den Code anpassen.
Wenn Du die Worte einliest, dann fängt es natürlich bei dem 1. Wort an. Also musst Du einen neuen Zähler haben den Du dann von Wort zu Wort hoch zählst.
Die Anzahl der Worte am Anfang kannst Du einlesen. Das wäre dann aber nur ein Check oder Du machst eine Schleife, die diese Anzahl Worte liest (und nicht mehr).
 

Blender3D

Top Contributor
Und wieso kannst Du nicht schreiben, was das Problem war? Der Code vom TE in dem Post war - was das Lesen und Schreiben angeht - korrekt.
Sorry hier also die Probleme des Codes.
1) bei einer fehlenden Datei "woerter.bin" wird beim Start des Programms eine Nullpointerexception geworfen.
Grund :
a) fehlende Abfrage ob das TextFeld nicht null ist.
Java:
 private void datenSchreiben() {
        if(  feld.getText().isEmpty()) {
            return;
        }
     ..
b) Sinnfreier Aufruf im Konstruktor von datenSchreiben im Konstruktor.
Java:
  public WoerterListe(String text) {
     
        super(text);
        //Prüfung ob die Datei schon existiert
        File datei = new File("woerter.bin");
        if(datei.exists() == false)
            //Sonst erzeugen
            datenSchreiben();
c) Aufruf der Funktion nach Erzeugung des TextFeldes

2) Unschöne Fehlermeldung beim drücken des ebenfalls sinnfreien Button lesen. Das Lesen sollte genau einmal beim Start des Konstruktors erfolgen. Die Filenotfound kann durch eine File exists Abfrage vermeiden. So wie der TE es in seinem Code im Kostruktor beim Schreiben, wie gesagt sinnfrei versucht.
Daraus ergibt sich ein weiterer Fehler
3) dass durch mehrmaliges Drücken des Lesen Buttons die Wörter mehrfach eingelesen werden und angezeigt werden.
Aber da hast Du die Anforderung, dass am Anfang die Anzahl der Worte steht, nicht erfüllt.
Warum ? Die Aufgabe lautetet:
die Aufgabe:
Erstellen Sie einen Editor, mit dem Sie eine Wortliste für das Hangman-Spiel in einer Datei ablegen können. Speichern Sie in dieser Datei nicht nur die Wörter an sich, sondern auch die Anzahl der gespeicherten Wörter.

Für das Speichern reicht es aus, wenn Sie jeweils ein neues Wort am Ende der Datei anhängen. Eine nachträgliche Änderung von gespeicherten Wörtern ist nicht erforderlich. Der Editor soll aber die bereits vorhandenen Wörter anzeigen können.

Wie Sie den Editor im Detail umsetzen und welche Bibliothek Sie für die Oberfläche verwenden, bleibt Ihnen überlassen. Dokumentieren Sie Ihre Lösung aber bitte ausführlich.
Da steht nichts davon, dass die Anzahl der Wörter am Anfang gespeichert werde sollen.
Die Anzahl ist bereits in der Anzahl der Wörter kumulative enthalten. Der TE nützt das selbst in seinem Code indem er beim Einlesen die Wörter zählt. In meinem Beispiel zu seinem Code wird die Anzahl in einem JLabel angezeigt.
 

Blender3D

Top Contributor
Das ist also aus meiner Sicht eine klare Aussage in der Aufgabe und genau diese erfüllst Du in meinen Augen nicht.
Das ist wie Du schon sagts eine Interpretationssache der Formulierung.
Der Beweis, ob die gewünschte Information in der Datei enthalten und damit gespeichert ist, lässt sich aber sehr einfach führen.
Daten eingeben Programm beenden. Programm starten. Wird die Anzahl der Wörter angezeigt, dann wurden die Information in der Datei hinterlegt und war dort folglich vorhanden und war dort auch permanent gespeichert.
Wenn Du dir den Code des TE ansiehst speichert er redundant diese Information am Anfang seines Files ab. Er benutzt sie im Code aber nicht sondern zählt die Wörter, um die Information auszulesen.
Wenn die Aufgabestellung aber so wie du es siehst wirklich erwartet, dass die Anzahl explizit in die Datei geschrieben wird, dann sollte sie auch wenigsten erwarten, dass die Information ausgelesen und weiterverwendet wird. Also eine Schleife die diese benutzt, um die Daten einzulesen.

Letztendlich hätte der Aufgabensteller das Ganze wohl besser formulieren sollen.
 

KonradN

Super-Moderator
Mitarbeiter
Es geht nicht um das Beweisen, dass die Information in der Datei irgendwie enthalten ist.

Es geht um die Anforderung, dass Du "nicht nur die Namen in die Datei schreibst".

Es muss also noch irgend etwas anderes in die Datei geschrieben werden. Das kann irgendwas sein. Von mir aus ein "Hallo" am Anfang.
 

Blender3D

Top Contributor
Es geht nicht um das Beweisen, dass die Information in der Datei irgendwie enthalten ist.

Es geht um die Anforderung, dass Du "nicht nur die Namen in die Datei schreibst".
Das hatte der TE ja bereits in seinem Code "richtig" gemacht.
Mein Hinweis galt in erster Linie dem fehlerhaften Code aufzuzeigen. Siehe #16
Und wieso kannst Du nicht schreiben, was das Problem war? Der Code vom TE in dem Post war - was das Lesen und Schreiben angeht - korrekt.
 

KonradN

Super-Moderator
Mitarbeiter
Hallo Blender3D, wie hast Du dieses Problem gelöst?
Das musst Du Dir doch überlegen können. Wenn Du alle Wörter aus der Datei liest: Was musst Du dann machen?
Wo finden sich denn bisher die Worte? (Dazu ggf. einmal schauen, was Du beim Lesen machst, da siehst Du es ja!)

Dann musst Du nur noch schauen, wie Du das, was die Worte beinhaltet, löschen kannst.
 

KonradN

Super-Moderator
Mitarbeiter
@Grauzev Wenn Du an der Funktionalität festhalten willst, dass Du auch einen Knopf hast zum laden der Wörter, dann hat der Code von @Blender3D diesbezüglich keine Lösung. Bei dem gegebenen Code werden die Wörter nur einmal beim Programmstart geladen, wenn noch gar nichts vorhanden ist.

Wenn Du an dem Knopf zum erneuten Laden der Wörter festhalten willst, dann wirst Du in dem Code keine Lösung finden.
 

Blender3D

Top Contributor
Hallo Blender3D, wie hast Du dieses Problem gelöst?
Wie @KonradN ganz richtig erwähnt, ist die Lösung den Lesen Button zu eliminieren.
Das Festhalten am Lese Button ist ja bereits ein grundsätzlicher Fehler in deinem Code.
Warum?
Wenn du ein Objekt deiner WoerterListe erzeugst ist zuerst kein Wort enthalten.
Die Aufgabe ist es aber vergangene Einträge zu berücksichtigen.
Das bewerkstelligt der Aufruf der Lesenfunktion im Konstruktor.
Der User kann dann durch das Hinzufügen von Wörtern den Inhalt der Klasse WoerterListe verändern.
Das passiert bei dir mittels dem Schreiben Knopf.
wenn man jetzt Deinen Lesen Knopf drückt wird die Lesenfunktion aufgerufen.
Die zu den bestehenden Wörtern noch einmal die gespeicherten hinzufügt.
Man könnte jetzt deine Lesenfunktion umbauen indem man die Variable worteAnzahl auf 0 setzt , die Jlabels aus der ContentPane entfernt und den Lesevorgang wiederholt.
Der Code würde dann zwar funktionieren wäre aber trotzdem falsch.
Warum?
Der Benutzer Deiner GUI hätte einen nutzlosen Button der das Interface verkompliziert ohne irgend einen Nutzen. Da die gespeicherten Worte und die eingegeben Worte gleich sind und ein Lesen nicht mehr notwendig ist. Mein Professor hat so was als konzeptionellen Fehler bezeichnet und mit Punkteabzug bestraft.
Aber teste meinen Code, überlege Dir dann ob ein Lesen Button hier irgend einen Vorteil oder Nutzen birgt und ziehe Deine eigenen Schlüsse daraus.
 

Grauzev

Mitglied
Vielen Dank Euch allen für die Hilfe und Tipps !!! 🤝🤝🤝 Mein Code funktioniert jetzt so wie gewünscht.
Das musst Du Dir doch überlegen können. Wenn Du alle Wörter aus der Datei liest: Was musst Du dann machen?
Wo finden sich denn bisher die Worte? (Dazu ggf. einmal schauen, was Du beim Lesen machst, da siehst Du es ja!)

Dann musst Du nur noch schauen, wie Du das, was die Worte beinhaltet, löschen kannst.
Und das hat mir sehr geholfen! Habe viel darüber nachgedacht und dann hat alles geklappt ))
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
MiMa Optimieren einer Methode zum Zentrieren von Fenstern AWT, Swing, JavaFX & SWT 0
P Methode wird nicht überprüft AWT, Swing, JavaFX & SWT 4
P paintComponent-Methode wird dauernd neu aufgerufen AWT, Swing, JavaFX & SWT 2
M passende Reflexion-Methode?? AWT, Swing, JavaFX & SWT 1
M Seltsame Exception bei setVisible(true) Methode in einem JFrame AWT, Swing, JavaFX & SWT 2
K JavaFX unterschiedliche (mehrere Fenster) in seperater Main Methode AWT, Swing, JavaFX & SWT 26
U was bewirkt die methode fill und unterschied zu anderen fill Methoden in 2dgraphics? (Java)? AWT, Swing, JavaFX & SWT 6
H Transparent zeichnen mit drawImage in paintComponent Methode AWT, Swing, JavaFX & SWT 3
Z Methode bei Boolean change neu Ausführen AWT, Swing, JavaFX & SWT 9
T TableView über Methode befüllen AWT, Swing, JavaFX & SWT 10
H Event Handling Thread - Abruf der get-Methode AWT, Swing, JavaFX & SWT 5
L JFrame Gui in anderer Methode aufrufen AWT, Swing, JavaFX & SWT 0
J Rekursive Methode JProgressBar AWT, Swing, JavaFX & SWT 4
A Methode pausieren bis anderes Ereignis ausgeführt AWT, Swing, JavaFX & SWT 2
K Swing Text eines Lables in einer Methode ändern AWT, Swing, JavaFX & SWT 13
1 Swing Progressbar benutzen um Fortschritt einer Methode anzuzeigen AWT, Swing, JavaFX & SWT 4
J Compiler in der JavaFX stop() Methode warten lassen bist eine Aktion in einer anderen Scene gemacht AWT, Swing, JavaFX & SWT 5
L JavaFX Problem beim Aufrufen einer Methode AWT, Swing, JavaFX & SWT 5
J 2D-Grafik Brauche Erklärung von Methode AWT, Swing, JavaFX & SWT 1
L Methode zum Füllen einer ComboBox AWT, Swing, JavaFX & SWT 4
I Methode Draw3DRect und DrawRect AWT, Swing, JavaFX & SWT 2
krgewb 2D-Grafik paint-Methode wird zu oft ausgeführt AWT, Swing, JavaFX & SWT 5
S Zeichen ohne paint-Methode AWT, Swing, JavaFX & SWT 2
K Methode repaint() AWT, Swing, JavaFX & SWT 1
A Methode in bestimmten Intervall ausführen AWT, Swing, JavaFX & SWT 2
J Swing Wann brauche ich @Override vor der paint()-Methode? AWT, Swing, JavaFX & SWT 1
Z jLabel von Methode aus aktualisieren AWT, Swing, JavaFX & SWT 7
Q AWT Methodenaufruf aus actionPerformed-Methode AWT, Swing, JavaFX & SWT 4
G Eine paint-Methode, 2 Welten? AWT, Swing, JavaFX & SWT 3
B Swing Update Swing Komponente bevor Methode startet. AWT, Swing, JavaFX & SWT 4
T Swing Methode in Listener aufrufen AWT, Swing, JavaFX & SWT 3
P keyTyped-Methode AWT, Swing, JavaFX & SWT 1
D JavaFX Java Methoden mit JavaFX Methode kommunizieren lassen? AWT, Swing, JavaFX & SWT 3
M JavaFX Methode nach initialize() aufrufen AWT, Swing, JavaFX & SWT 6
F JavaFX Mit einer Methode auf Stage zugreifen. AWT, Swing, JavaFX & SWT 8
A paint-Methode aufrufen AWT, Swing, JavaFX & SWT 13
C JavaFX Auf Nodes einer FXML-Datei in start Methode zugreifen AWT, Swing, JavaFX & SWT 5
R GUI Element in einer Methode aktualisieren (JTextPane) AWT, Swing, JavaFX & SWT 13
J Swing Problem mit Graphics Methode AWT, Swing, JavaFX & SWT 4
K Swing Durch Methode erzeugte Buttons ansteuern AWT, Swing, JavaFX & SWT 5
S Grafik: Programm kommt nicht zur paint()-Methode AWT, Swing, JavaFX & SWT 6
T LayoutManager Methode, um Bildschirm(fenster) für Aktualisierungen zu blockieren bzw. freizugeben gesucht AWT, Swing, JavaFX & SWT 2
W Paint-Methode in anderer Klasse funktioniert nicht AWT, Swing, JavaFX & SWT 7
S PaintIn - Methode AWT, Swing, JavaFX & SWT 1
J Swing ungewünschter Nebeneffekt bei der repaint() Methode AWT, Swing, JavaFX & SWT 3
A befüllen eines JTables mittels Methode AWT, Swing, JavaFX & SWT 10
K Kann nicht auf GUI Elemente zugreifen, mit einer Methode im Controller klappts, mit der anderen nich AWT, Swing, JavaFX & SWT 10
D JavaFX Interface Initializable - Was machen die Parameter in der Methode inizializeable() ? AWT, Swing, JavaFX & SWT 4
S JLabel-Text in Methode setzen? AWT, Swing, JavaFX & SWT 2
F JavaFX Zugriff auf Controller Methode von einer normalen Klasse aus AWT, Swing, JavaFX & SWT 4
F 2D-Grafik Was ruft die Paint - Methode auf ? AWT, Swing, JavaFX & SWT 2
S JButton u. Label auf paint-Methode AWT, Swing, JavaFX & SWT 1
S Paint Methode ohne implements JPanel AWT, Swing, JavaFX & SWT 1
S Farbe ändern bei der paint-Methode AWT, Swing, JavaFX & SWT 5
J ActionListener soll auf paint() Methode zugreifen AWT, Swing, JavaFX & SWT 1
J Problem mit der paint Methode AWT, Swing, JavaFX & SWT 0
J JLabel während einer methode aktualisieren AWT, Swing, JavaFX & SWT 6
Junb 2D-Grafik paint() Methode bugt? AWT, Swing, JavaFX & SWT 2
T Swing Label aus anderer Methode bearbeiten AWT, Swing, JavaFX & SWT 2
I Paint-Methode von nicht statischen Objekten aufrufen AWT, Swing, JavaFX & SWT 3
C Methode über Buttonklick starten AWT, Swing, JavaFX & SWT 8
S Swing Mit einem Link eine Methode aufrufen AWT, Swing, JavaFX & SWT 2
P Swing Auf Methode zugreifen (am Schlauch steh) AWT, Swing, JavaFX & SWT 5
D JSlider "laggt" nach überschreiben der paint methode AWT, Swing, JavaFX & SWT 2
D Swing DefaultTableModel setValueAt Methode AWT, Swing, JavaFX & SWT 7
J valueChanged()-Methode liefert unbrauchbare Daten AWT, Swing, JavaFX & SWT 4
T Swing JPanel - "Open" Methode? AWT, Swing, JavaFX & SWT 6
P Swing actionPerformed()-Methode funktioniert nicht AWT, Swing, JavaFX & SWT 3
M Applet Bricht Methode zwischendruch ab AWT, Swing, JavaFX & SWT 11
K Per Textfield Methode ausführen AWT, Swing, JavaFX & SWT 6
J Swing JTable - nach Sortieren andere Methode aufrufen AWT, Swing, JavaFX & SWT 2
C Swing Was macht die Methode "setDataProviderCreditShown(boolean b)" AWT, Swing, JavaFX & SWT 4
R Swing Mit Swing eine throws Exception Methode öffnen AWT, Swing, JavaFX & SWT 3
GianaSisters Swing jTable's valueChanged Methode überschreiben AWT, Swing, JavaFX & SWT 2
P EDT Problem? Kein Aufruf der repaint Methode AWT, Swing, JavaFX & SWT 6
A Paint Methode externer auruf AWT, Swing, JavaFX & SWT 5
N Methode zum Prüfen ob Jtextfield verändert worden ist AWT, Swing, JavaFX & SWT 2
K beim Schließen des JFrames, Methode aufrufen AWT, Swing, JavaFX & SWT 3
J AWT Methode paint() AWT, Swing, JavaFX & SWT 4
X Bild via FileChooser in paint-Methode laden AWT, Swing, JavaFX & SWT 2
E Umgang mit der Update Methode AWT, Swing, JavaFX & SWT 38
D Applet Methode in Timer einbinden AWT, Swing, JavaFX & SWT 6
Screen Fehler bei Get-Methode für ArrayList AWT, Swing, JavaFX & SWT 8
P Swing JPanel über Methode setzen AWT, Swing, JavaFX & SWT 2
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
eskimo328 Java6 Methode in Java5 verwenden (memory leak JInternalFrame) AWT, Swing, JavaFX & SWT 4
T Swing setText()-Methode Funktioniert nicht AWT, Swing, JavaFX & SWT 7
L JLabel Methode setText funktioniert nicht AWT, Swing, JavaFX & SWT 5
S Thread.sleep() in einer methode fürs zeichen AWT, Swing, JavaFX & SWT 3
S Visual Editor mit main Methode AWT, Swing, JavaFX & SWT 3
G paint-Methode kopiert GUI AWT, Swing, JavaFX & SWT 14
F Swing JFrame Methode beim Schließen aufrufen AWT, Swing, JavaFX & SWT 5
D Zwei String Attribute über eine Methode als Zeilen in einer Tabelle darstellen AWT, Swing, JavaFX & SWT 9
H applet Methode aus abstrakter Klasse aufrufen AWT, Swing, JavaFX & SWT 12
S Methode fireTableDataChanged() AWT, Swing, JavaFX & SWT 2
Y Swing Problem mit Main Methode AWT, Swing, JavaFX & SWT 8
E 2D-Grafik Zeichnen außerhalb der "paintComponent"-Methode? AWT, Swing, JavaFX & SWT 5
R Run Methode Probleme AWT, Swing, JavaFX & SWT 2
B Methode setzt nicht das Layout in einer if-Abfrage AWT, Swing, JavaFX & SWT 13
F AWT Probleme mit der paint() methode AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen

Neue Themen


Oben