Strings prüfen

Justin09

Neues Mitglied
Hallo zusammen, ich habe folgendes Problem:
Ich möchte Daten aus einer Datei zeilenweise.
D.h eine Zeile soll ausgegeben werden, dann soll der User schauen ob der Ausgegebene String richtig ist, mithilfe eines Unterfensters.
Wenn dann überprüft wurde, soll die nächste Zeile angezeigt werden und das Fenster öffnet sich zur Überprüfung erneut.
Es klappt bisher alles außer, dass eben nur eine Zeile ausgegeben wird und ich dann überprüfen kann ob es richtig ist.
[CODE lang="java" title="Das ist der dazugehörige Code"] private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
List<String> liste = new ArrayList();
String dateiname = Dateilesefeld.getText();
String[] speicher;
if ("apfel.txt".equals(dateiname))
try {
FileReader lesehilfe = new FileReader("C:\\Users\\thedr\\Documents\\NetBeansProjects\\Pruefungsvorbereitung\\src\\main\\java\\apfel.txt");
BufferedReader leser = new BufferedReader(lesehilfe);
while (leser.ready()) {
gelesen = leser.readLine();
liste.add(gelesen);
speicher = gelesen.split(";");
for (int i = 0; i < speicher.length; i++) {
jTextArea2.append(speicher);
jTextArea2.append("\n");

}
jTextArea2.append("Info korrekt?");
jTextArea2.append("\n");

}
} catch (IOException ex) {
Logger.getLogger(Oberfenster.class.getName()).log(Level.SEVERE, null, ex);[/CODE]
 

Neumi5694

Top Contributor
Wenn nur eine Zeil eingelesen wird, ist es möglich, dass dein Leser wohl nicht mehr ready ist nach der ersten Zeile.
Hast du schon mal im Log geprüft, ob es danach einen Fehler gab?

"Das Fenster öffnet sich erneut" ... nicht in deinem Code. Hier veränderst du nur eine TextArea.
Außerdem musst du die Logik in einen eigenen Thread verschieben, die UI ändert sich nämlich erst, wenn der Handler komplett fertig ist.
D.h. "jTextArea2.append" wird keine Auswirkung auf den Bildschirm haben, bis alle Zeilen eingelesen und bestätigt sind.

Du schließt die Reader nicht, auch nicht gut. Falls du sie nicht manuell schließen willst, verwende try-with-resource
Das schließt alle AutoCloseables nach Verwendung.


Dein Code macht zu viel auf einmal, er hält die Datei offen, bis alle Zeilen vom User bestätigt wurden, das ist nicht gut. Dateizugriffe sollten so kurz wie möglich gehalten werden.

Splitte das Ganze mal.
Java:
List<String> fileContent = readAllLines(filename); //die Datei wird in der Methode geöffnet und auch wieder geschlossen.

Dann überprüf als erstes Mal, ob die Datei korrekt eingelesen wurde (einfaches println pro Zeile).

Für die Logik erstellst du dann einen eigenen Thread, an den du die eingelesenen Zeilen übergibst.
Der Thread gibt dann jede Zeile aus und wartet auf die Nutzereingabe nach jeder Zeile, entweder durch das genannte "Neuöffnen" oder was anderes.
Wenn es für jede Zeile einen eigenen Dialog braucht, bietet sich JOptionPane() an.
 
Zuletzt bearbeitet:

Justin09

Neues Mitglied
Edit: Sorry, hab das mit dem NeuÖffnen übersehen, werde nochmal nachbearbeiten.

Wenn nur eine Zeil eingelesen wird, ist dein Leser wohl nicht mehr ready nach der ersten Zeile.
Hast du schon mal im Log geprüft, ob es danach einen Fehler gab?

Eine TextArea ist keine Konsole. Wie soll der Benutzer hier bestätigen, ob der Text ok ist?

Außerdem hast du hier ein Problem mit Threads. Die UI wird erst aktualisiert, wenn der Listener des Buttons komplett beendet wurde.
D.h. "jTextArea2.append" wird keine Auswirkung auf den Bildschirm haben, bis alle Zeilen eingelesen sind. Du musst die Logik in einen eigenen Thread verschieben, damit die UI sofort reagiert.

Du schließt die Reader nicht, auch nicht gut. Falls du sie nicht manuell schließen willst, verwende try-with-resource
Das schließt alle AutoCloseables nach Verwendung.

Als letztes:
Dein Code macht zu viel auf einmal, er hält die Datei offen, bis alle Zeilen vom User bestätigt wurden, das ist nicht gut. Dateizugriffe sollten so kurz wie möglich gehalten werden.


Splitte das Ganze mal.
Java:
List<String> fileContent = readAllLines(filename); //die Datei wird in der Methode geöffnet und auch wieder geschlossen.

Dann überprüf als erstes Mal, ob die Datei korrekt eingelesen wurde (einfaches println pro Zeile).

Für die Logik erstellst du dann einen eigenen Thread, an den du die eingelesenen Zeilen übergibst.
Der Thread gibt jede Zeile aus und wartet nach jeder Zeile auf die Benutzereingabe.
Der User kann das durch ein Unterfenster bestätigen, in dem mehrere RadioButtons sind, hätte ich vielleicht dazuschreiben sollen, tut mir leid ^^
 

Neumi5694

Top Contributor
Der User kann das durch ein Unterfenster bestätigen, in dem mehrere RadioButtons sind, hätte ich vielleicht dazuschreiben sollen, tut mir leid ^^
Ist ok, das war eher so eine Detailfrage. Ich seh im Code aber eh nirgends, dass du irgendwo auf eine Eingabe warten würdest.
Dein Code macht nichts anderes, als alle Zeilen und jeweils die dazu passende Meldung in die TextArea zu schreiben.
 

KonradN

Super-Moderator
Mitarbeiter
@Neumi5694 hat gute Ideen gebracht, die so umsetzbar sein müssten. Ich würde dabei aber ggf. etwa etwas anders aufteilen um dann auch auf den Thread verzichten zu können.

So versuchst Du derzeit alles in einer Methode zu machen - das ist so immer extrem schlecht. Eine Oberfläche ist Event getrieben - also überleg Dir genau, was bei jedem Event passieren soll!

Und wie immer gilt: Schreib Dir das auf und verfeinere es.

a) Es wird ein Knopf gedrückt und dann wird eine Eingabe genommen und die Datei geöffnet. Die erste Zeile wird gelesen und angezeigt.

b) Es wird die Zeile bestätigt: Die nächste Zeile wird gelesen und angezeigt (und was auch immer)

c) ....

Da wirklich alles, was da passieren soll, genau beschreiben. Daraus kannst Du dann Code ableiten.

Dein BufferedReader kann dann z.B. nicht lokal in einer Methode sein, denn Du brauchst den ja in mehreren Events. Also so wie die Controls auch -> Instanzvariable!

Also wirklich alles so einzelnd durchgehen! Und dann über alle Fälle nachdenken:
Was ist wenn ein User zwei Mal a) macht? Also wenn ein BufferedReader offen ist, dann schließen wir den erst einmal.
Was ist, wenn der User das Fenster schließt? Dann macht man den BufferedReader, so einer offen ist, auch zu
...

Das Vorgehen ist somit immer vergleichbar nur eben betrachtest Du jetzt Aktionen, die der User machen kann. Und als zweiten Schritt schaust Du, was für Zustände du hast (Also z.B. Noch kein BufferedReader oder du hast schon einen offenen BufferedReader) um dann zu entscheiden, welche Events erlaubt sind oder nicht und um dann die Handlung zu prüfen. (So kannst Du z.B. Event A) verhindern so lange eine Datei nicht zu Ende bearbeitet wurde, also z.B. den Button davon Disablen.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H setToolTipText ignoriert HTML-Formatierung des anzuzeigenden Strings AWT, Swing, JavaFX & SWT 4
G Button Strings Effektiver setzen AWT, Swing, JavaFX & SWT 3
P GUI Ausgabe des Strings AWT, Swing, JavaFX & SWT 3
D JComboBox Strings aus JTextFields zuordnen AWT, Swing, JavaFX & SWT 2
B ArrayList, Strings anzeigen AWT, Swing, JavaFX & SWT 1
Fiedlerdan Vergleich vieler Strings ohne ellenlange Argumentierten AWT, Swing, JavaFX & SWT 7
M Strings im JTextPane vergleichen und mit StyledDocument formatieren AWT, Swing, JavaFX & SWT 3
J Swing Strings werden nicht in Textfeld geschrieben AWT, Swing, JavaFX & SWT 8
MrSnake Tabelle nach 2 Strings Filtern AWT, Swing, JavaFX & SWT 3
MiMa Umlaute in JavaFX GUI Strings AWT, Swing, JavaFX & SWT 5
J Swing Vertikales Zeichnen eines Strings mit Java2D AWT, Swing, JavaFX & SWT 1
B jTextfield Übergabe des Strings AWT, Swing, JavaFX & SWT 16
G Mehrere Strings um Kreis zeichnen und positionieren AWT, Swing, JavaFX & SWT 0
vodkaz JTextField && Strings AWT, Swing, JavaFX & SWT 2
R FontMetrics - Ausmaße eines Strings AWT, Swing, JavaFX & SWT 4
A Swing Anpassen der Spaltenbreite durch die länge eines Strings AWT, Swing, JavaFX & SWT 3
W Vergleich zweier Strings und schreiben in Textarea AWT, Swing, JavaFX & SWT 12
M breite eines "drawString()-Strings" AWT, Swing, JavaFX & SWT 2
J Swing JList... mehrere Strings in Zeile AWT, Swing, JavaFX & SWT 8
M SWT Jface Action und localised Strings AWT, Swing, JavaFX & SWT 6
F Pixelhöhe eines Strings AWT, Swing, JavaFX & SWT 2
R Pixelmaße eines zu zeichnenden Strings AWT, Swing, JavaFX & SWT 3
ElViZ End-Position eines gezeichneten Strings ermitteln. AWT, Swing, JavaFX & SWT 2
Pithecanthropus [gelöst] JTree, aber nicht mit Strings, sondern mit Objects? AWT, Swing, JavaFX & SWT 2
K Strings aus jTextArea in Liste oder Tabelle übertragen- wie? AWT, Swing, JavaFX & SWT 4
A Strings an Textarea anderer Klasse append(en) AWT, Swing, JavaFX & SWT 12
D Einzelnen Worte eines Strings farbig machen AWT, Swing, JavaFX & SWT 11
M Farbe eines strings in JTextArea AWT, Swing, JavaFX & SWT 2
A Strings in JTable fett ausgeben - ohne! HTML AWT, Swing, JavaFX & SWT 10
N Pixelbreite eines Strings AWT, Swing, JavaFX & SWT 11
B Länge eines Strings in Pixel AWT, Swing, JavaFX & SWT 2
K Problem mit TextField Strings AWT, Swing, JavaFX & SWT 2
G Verzeichnis Strings im JTree AWT, Swing, JavaFX & SWT 9
R Strings aus einer .txt laden AWT, Swing, JavaFX & SWT 8
M Höhe von eines Strings in Pixeln (nicht Höhe einer Zeile) AWT, Swing, JavaFX & SWT 12
W Strings diagonal zeichnen AWT, Swing, JavaFX & SWT 2
TRunKX Kommentarfeld schneidet die Strings ab AWT, Swing, JavaFX & SWT 13
N Laenge eines Strings in Pixel AWT, Swing, JavaFX & SWT 2
R Steuerzeichen eines Strings (z.B. ENTER) zurückwandeln AWT, Swing, JavaFX & SWT 3
S Anzahl ActionEvents (Strings in eine ArrayList einfügen) AWT, Swing, JavaFX & SWT 4
N Checkbox mit mehreren Strings belegen? AWT, Swing, JavaFX & SWT 6
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
S JavaFX TextField auf Datentyp prüfen AWT, Swing, JavaFX & SWT 1
R Swing JLabel berührung an einem anderen Label prüfen AWT, Swing, JavaFX & SWT 3
I JavaFX TextField auf Eingabe prüfen AWT, Swing, JavaFX & SWT 3
J JavaFx/SceneBuilder/Felder beim verlassen prüfen AWT, Swing, JavaFX & SWT 1
M Swing JTable >> Eingaben prüfen => Empfehlungen? AWT, Swing, JavaFX & SWT 2
R Prüfen ob Form bereits geöffnet AWT, Swing, JavaFX & SWT 9
M JTable: Prüfen ob Zelle leer ist AWT, Swing, JavaFX & SWT 5
llabusch Prüfen ob JMenu leer ist & löschen AWT, Swing, JavaFX & SWT 1
F In Action Listener TextFields einlesen und prüfen. Abbruch bei falschen Eingaben. Wie mache ich das? AWT, Swing, JavaFX & SWT 2
U Swing JTextField zur Laufzeit auf Eingaben prüfen AWT, Swing, JavaFX & SWT 0
L Swing Gui auf Benutzerinteraktion prüfen AWT, Swing, JavaFX & SWT 7
T Prüfen ob 2 JLabel übereinander liegen. Performance Problem. AWT, Swing, JavaFX & SWT 5
N Methode zum Prüfen ob Jtextfield verändert worden ist AWT, Swing, JavaFX & SWT 2
M Komponenten übereinander prüfen AWT, Swing, JavaFX & SWT 3
P Vor Beenden änderungen prüfen AWT, Swing, JavaFX & SWT 2
S SWT Wie bei Widget Text auf int prüfen bei Eingabe AWT, Swing, JavaFX & SWT 5
A Prüfen, ob ein Float eingegeben wurde AWT, Swing, JavaFX & SWT 5
klattiator CardLayout - Cards auf Existenz prüfen AWT, Swing, JavaFX & SWT 3
A Datum prüfen AWT, Swing, JavaFX & SWT 11
M Prüfen, ob in einem Textfeld/Tabelle eine Eingabe erfolgt is AWT, Swing, JavaFX & SWT 11
G Prüfen ob ein Treepath existiert AWT, Swing, JavaFX & SWT 3
G eingegebene Werte einer JTable prüfen? Bitte helfen AWT, Swing, JavaFX & SWT 5
I Prüfen einer Eingabe in JTextField, Fokusverlust AWT, Swing, JavaFX & SWT 2
C JTextField Eingabe prüfen AWT, Swing, JavaFX & SWT 4
D Prüfen, ob Fenster bereits schon geöffnet ist AWT, Swing, JavaFX & SWT 1
G Inhalt von Textfeld prüfen AWT, Swing, JavaFX & SWT 10
W JTextField auf gültigkeit prüfen AWT, Swing, JavaFX & SWT 2
E Inhalt einer JComboBox aufgrund von Eintragungen prüfen,??? AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben