Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo, ich habe den folgenden Code aus einem Buch abgeschrieben und das Programm ignoriert Teile des Codes wenn ich es ausführe. Es wird keine Fehlermeldung ausgegeben.
Java:
package notizen;
import java.io.*;
import javax.swing.JOptionPane;
public class Uebung13 {
public static void main(String[] args) {
try {
BufferedWriter bw = new BufferedWriter(new FileWriter ("Notizen.txt", true));
int weiter = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String eingabe;
while(weiter == 0) {
System.out.print("Geben Sie Ihre Notiz ein: ");
eingabe = br.readLine();
bw.write(eingabe+ "\n");
weiter = JOptionPane.showConfirmDialog(null,
"Möchten Sie eine weitere Notiz eingeben?", "Bestätigung", JOptionPane.YES_NO_OPTION);
}
bw.close();
}
catch(IOException ausnahme) {
System.out.print("Fehler beim Öffnen der Datei");
}
}
}
Ich glaube das Problem ist das in Zeile 18 kein Wert an die Variable "weiter" übergeben wird. Das ist aber notwendig um der while Schleife mitzuteilen wie es weitergehen soll. Was sagt ihr zu dem code? Kann das überhaupt funktionieren? Ich verwende Eclipse als IDE und habe bisher nach Hilfe unter dem Stichwort JOptionPane.showConfirmDialog gesucht.
Der Vergleich mit 0 ist nicht gut. Ich würde an der Stelle mit JOptionPane.YES_OPTION vergleichen, außerdem bietet sich hier eine do-while-Schleife an.
Java:
do {
// ...
} while (weiter == JOptionPane.YES_OPTION);
EDIT: ach, und dann hätten wir noch ein paar weitere Anmerkungen...
Ich dachte das ein fehlerhafter Code vorliegt, weil das Programm nicht nachfragt ob eine weitere Notiz eingegeben werden soll.
Ich habe den Code verändert:
Java:
package notizen;
import java.io.*;
import javax.swing.JOptionPane;
public class Uebung13 {
public static void main(String[] args) {
try (BufferedWriter bw = new BufferedWriter(new FileWriter ("Notizen.txt", true))){
int weiter = 0;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
do{
System.out.print("Geben Sie Ihre Notiz ein: ");
String eingabe = br.readLine();
bw.write(eingabe+ "\n");
} while (weiter == JOptionPane.YES_OPTION);
}
catch(IOException ausnahme) {
System.out.print("Fehler beim Öffnen der Datei");
}
}
}
Das Programm nimmt jetzt die Eingaben auf aber die Option ob eine weitere Eingabe erfolgen soll erfolgt immer noch nicht.
Hallo, ich habe den folgenden Code aus einem Buch abgeschrieben und das Programm ignoriert Teile des Codes wenn ich es ausführe. Es wird keine Fehlermeldung ausgegeben.
Das Problem tritt mit diesem Code unter Eclipse tatsächlich auf. Der Grund dafür ist aber nicht die Logik im Code. Das Problem ergibt sich aus der Tatsache, dass Swingkomponenten nicht unbedingt threadsicher sind. Das gilt auch für JOptionpane. Im konkreten Fall wird auf meinem System ( Win10 Eclipse Java 8 ) der Code zwar korrekt aufgerufen aber das Fenster von JOptionPane wird nicht angezeigt. Ich nehme an, dass das bei dir auch der Fall ist. Die Lösung ist hier invokelater(). Das hat bei mir das Fenster wie gewünscht mit diesem Code angezeigt.
Bei der zweiten Eingabe allerdings wurde die JOptionpane wieder nicht angezeigt. Ich konnte das dadurch beheben indem ich das Schließen des geöffneten Files in einen finally Block ausgelagert habe.
Mit diesen beiden Anpassungen funktioniert jetzt der Code aber wie gewünscht.
Java:
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
public class Uebung13 {
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
doNotesInput();
}
});
}
private static void doNotesInput() {
BufferedWriter bw = null;
try {
bw = new BufferedWriter(new FileWriter("Notizen.txt", true));
int weiter = JOptionPane.YES_OPTION;
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String eingabe;
while (weiter == JOptionPane.YES_OPTION) {
System.out.println("Notiz eingeben: ");
eingabe = br.readLine();
bw.write(eingabe + "\n");
weiter = JOptionPane.showConfirmDialog(null, "Möchten Sie eine weitere Notiz eingeben?", "Bestätigung",
JOptionPane.YES_NO_OPTION);
}
System.out.println("Ende der Notiz Eingabe!");
} catch (IOException ausnahme) {
System.out.print("Fehler beim Öffnen der Datei");
} finally {
if (bw != null)
try {
bw.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}