Guten Tag,
nachdem ich verzweifelt mehrere Stunden gegoogelt, aber nichts gefunden habe, vielleicht auch, weil ich nicht weiss, nach was genau ich suchen muss, und dieses Problem in ähnlicher Weise nun schon zum zweiten Mal aufgetreten ist, habe ich den Schritt in dieses Forum gewagt. ;(
Kurze Erklärung um was es drum herum von diesem Codeschnipsel geht: Es ist ein GUI, welches mit JButton einen HexZiffernBlock darstellt. Auf diesem Ziffernblock kann per Tastendruck oder Maus in ein seperates JLabel geschrieben werden. Das JLabel soll die eingegebene Hexzahl wie auch den berechneten Dezimalwert darstellen. Der HexZiffernBlock erstellt bei jedem entsprechenden Aufruf einen eigens dafür definierten Event, der dann mit folgender Methode bearbeitet wird. Das Eventzeugs klappt alles bestens und macht was es muss. Dies ist also nicht meine Sorge.
MEINE SORGE: folgende Methode funktioniert beim ersten Aufruf tadellos, beim zweiten Aufruf wird der StringBuffer jedoch nicht, wie ich erwarte, neu erstellt, sondern derjenige genommen, der beim ersten Durchgang verwendet wurde. Das StringBuffer-Objekt leeren, löschen oder was auch immer funktioniert nicht. Es mit einem String oder einem StringBuilder versuchen funktioniert ebenfalls nicht. Das Resultat ist jedes Mal dasselbe:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "(HEX) 6 == (DEZIMAL) 6A"
erste Eingabe
zweite Eingabe
... logisch, da dieser String nicht in eine Dezimalzahl geparst werden kann.
Aber um Himmelswillen. Sage mir bitte jemand, was ich anderes machen muss!! Ich selbst weiss es nicht. :bahnhof:
Die einzige Vermutung die ich habe, ist, das es etwas mit Multithreading zu tun haben könnte, aber weder bin ich bewandert in diesem Gebiet, noch überzeugt es mich selbst.
nachdem ich verzweifelt mehrere Stunden gegoogelt, aber nichts gefunden habe, vielleicht auch, weil ich nicht weiss, nach was genau ich suchen muss, und dieses Problem in ähnlicher Weise nun schon zum zweiten Mal aufgetreten ist, habe ich den Schritt in dieses Forum gewagt. ;(
Kurze Erklärung um was es drum herum von diesem Codeschnipsel geht: Es ist ein GUI, welches mit JButton einen HexZiffernBlock darstellt. Auf diesem Ziffernblock kann per Tastendruck oder Maus in ein seperates JLabel geschrieben werden. Das JLabel soll die eingegebene Hexzahl wie auch den berechneten Dezimalwert darstellen. Der HexZiffernBlock erstellt bei jedem entsprechenden Aufruf einen eigens dafür definierten Event, der dann mit folgender Methode bearbeitet wird. Das Eventzeugs klappt alles bestens und macht was es muss. Dies ist also nicht meine Sorge.
MEINE SORGE: folgende Methode funktioniert beim ersten Aufruf tadellos, beim zweiten Aufruf wird der StringBuffer jedoch nicht, wie ich erwarte, neu erstellt, sondern derjenige genommen, der beim ersten Durchgang verwendet wurde. Das StringBuffer-Objekt leeren, löschen oder was auch immer funktioniert nicht. Es mit einem String oder einem StringBuilder versuchen funktioniert ebenfalls nicht. Das Resultat ist jedes Mal dasselbe:
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "(HEX) 6 == (DEZIMAL) 6A"
erste Eingabe
zweite Eingabe
... logisch, da dieser String nicht in eine Dezimalzahl geparst werden kann.
Aber um Himmelswillen. Sage mir bitte jemand, was ich anderes machen muss!! Ich selbst weiss es nicht. :bahnhof:
Die einzige Vermutung die ich habe, ist, das es etwas mit Multithreading zu tun haben könnte, aber weder bin ich bewandert in diesem Gebiet, noch überzeugt es mich selbst.
Java:
/*
* @Override
* Implementiert das Interface IntegerValueListener
* geplant ist: Der Text vom JLabel "output" soll mit dem über den Event erhaltenen Ereignis-Code
* (clear, backspace, Ziffern 1-16) zu "kombinieren", d.h. Zahlen anfügen, letzte Ziffer löschen,
* oder ganzer Text löschen.
*/
public void integerValueGenerated(IntegerValueEvent event) {
// hier sollte jedesmal! ein neuer StringBuffer erstellt werden (geht nicht)
StringBuffer text = new StringBuffer();
// den vorhandenen Text vom JLabel holen und anfügen
text.append(output.getText());
// eventKey Abfrage
if (event.getKey() == IntegerValueEvent.HEXNUMBER) {
Integer digit = event.getKeyNumber();
// Hex-Ziffer anfügen
text.append(Integer.toHexString(digit).toUpperCase());
} else if (event.getKey() == IntegerValueEvent.BACKSPACE) {
try {
// letzte Ziffer löschen, ...
text.deleteCharAt(text.length()-1);
} catch (Exception e) {
// ... falls vorhanden!
}
} else if (event.getKey() == IntegerValueEvent.CLEAR) {
// alles löschen
text.delete(0, text.length()-1);
}
// String Buffer zusammensetzen
StringBuffer textToSee = new StringBuffer("(HEX) ");
textToSee.append(text);
textToSee.append(" == (DEZIMAL) ");
textToSee.append(Integer.parseInt(text.toString(), 16));
// JLabel Text neu setzen
output.setText(textToSee.toString());
}