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;importjava.io.*;importjavax.swing.JOptionPane;publicclassUebung13{publicstaticvoidmain(String[] args){try{BufferedWriter bw =newBufferedWriter(newFileWriter("Notizen.txt",true));int weiter =0;InputStreamReader isr =newInputStreamReader(System.in);BufferedReader br =newBufferedReader(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;importjava.io.*;importjavax.swing.JOptionPane;publicclassUebung13{publicstaticvoidmain(String[] args){try(BufferedWriter bw =newBufferedWriter(newFileWriter("Notizen.txt",true))){int weiter =0;InputStreamReader isr =newInputStreamReader(System.in);BufferedReader br =newBufferedReader(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:
importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.util.Scanner;importjavax.swing.JOptionPane;importjavax.swing.SwingUtilities;publicclassUebung13{publicstaticvoidmain(String[] args){SwingUtilities.invokeLater(newRunnable(){@Overridepublicvoidrun(){doNotesInput();}});}privatestaticvoiddoNotesInput(){BufferedWriter bw =null;try{
bw =newBufferedWriter(newFileWriter("Notizen.txt",true));int weiter =JOptionPane.YES_OPTION;InputStreamReader isr =newInputStreamReader(System.in);BufferedReader br =newBufferedReader(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();}}}}