Frage zu SwingUtilities.invokeLater

Status
Nicht offen für weitere Antworten.
G

Gast2

Gast
Hall zusammen,

ich hab mal wieder ein Problem mit SwingUtilities.invokeLater und versteh es nicht so ganz.Erstmal die Helper Klasse welche benutzt wird.
[HIGHLIGHT="Java"]
public class ErrorHelper {

public static void showError(Component owner, String titleKey, Exception exception) {
Window window;
if (owner != null) {
window = SwingUtilities.getWindowAncestor(owner);
owner = window != null ? window : owner;
}

JXErrorPane.showDialog(owner, createErrorInfo(titleKey, exception));

}

public static void showError(Component owner, Exception exception) {
showError(owner, "errordialog.title", exception);
}


[/HIGHLIGHT]

Also wenn ich folgenden Code ausführe wir der Fehlerdialog nur einmal geöffnet und das Error auch nur einmal auf der Konsole ausgegben
[HIGHLIGHT="Java"]

public void actionPerfomed(ActionEvent e){
try {
//some stuff
} catch (final Exception e) {
System.out.println("Error");
SwingUtilities.invokeLater(new Runnable(){
public void run() {
ErrorHelper.showError(errorReferenceComponent, e);
}

});
}
}
[/HIGHLIGHT]

bei diesem code hingegen wird der fehlerdialog 2 mal angezeigt genauso das error auf der konsole...
[HIGHLIGHT="Java"]
public void actionPerfomed(ActionEvent e){
try {
//some stuff
} catch (final Exception e) {
System.out.println("Error");
ErrorHelper.showError(errorReferenceComponent, e);

}
}
[/HIGHLIGHT]

Kann mir jemand erklären warum???;(
 
G

Gast2

Gast
ahhhh jetzt nach langem suchen blick ich die sache =)...
vielleicht weiß jemand eine gute lösung...

ich hab ein textfeld das soll auf änderungen von return,tab, und focus lost reagieren...
gibt es da einen geeigneten listener dafür?
wenn dieses event passiert dann überpüft er die eingegeben daten und wirft eine exception und daraufhin wird der error angezeigt.
Die bisherige Lösung war ein ActionListener und ein FocusListener, was da aber das problem war wenn man return drückt und ein fehler angezeigt wird(focus) dann hat man 2 mal das gleiche event... und das will ich irgendwie umgehen...
 

Marco13

Top Contributor
Kannst mal nach DocumentListener suchen. Irgendein Flag "isCurrentlyShowingDialog" oder so wäre vielleicht ein Workround, aber das sollte nicht notwendig sein...
 
G

Gast2

Gast
okay versuch ich mal... besser als nichts =)...
weiß sonst noch jemand eine gute lösung für return und focuslost???

EDIT: DocumentListener??? Leider finde ich dazu nichts =(
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
ich hab einen Listener gesucht der auf focusLost und auf actionPerformed reagiert...
Das problem war folgendes man schreibt einen Wert in ein Textfeld, der Wert wird erst im Model übernommen, wenn enter(oder Speicher Button) gedrückt wurde jetzt wollte ich dass gleiche auch machen wenn das textfeld den focus verliert...
so problem ist wenn ich nun enter drück und es passiert ein fehler wird ein Fehlerdialog angezeigt, was gleichzeitig für das textfeld wieder ein focusLost bedeutet (bevor die actionPerformed methode fertig ist) und diese wiederum ein Fehlerdialog hoch popt, da das focusLost ein rekursiven aufruf macht, darum werden 2 gleiche Fehlerdialoge hintereinander angezeigt...

mit dem InputVerifier ist das problem halt wenn man eine falsche eingabe macht kommt man aus dem feld heraus und MUSS das richtige eingeben wenn der User aber nicht weiß was er eingeben soll oder merkt er hat was vergessen und die Aktion abbrechen möchte kommt er halt nicht mehr aus dem textfeld heraus... find ich net ganz praktikabel
 
Zuletzt bearbeitet von einem Moderator:
G

Gast2

Gast
Hier ein Beispiel
[HIGHLIGHT="Java"]

import java.awt.BorderLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.event.WindowListener;

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;

public class VerifierTest extends JFrame {

public VerifierTest() {
JTextField tf1 = new JTextField("Type \"pass\" here");
getContentPane().add(tf1, BorderLayout.NORTH);
tf1.setInputVerifier(new PassVerifier());
tf1.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {
JTextField tf = (JTextField) e.getSource();
if (!"pass".equals(tf.getText())) {
System.out.println("Fehler");
JOptionPane.showMessageDialog(tf, "Fehler.", "Error", JOptionPane.ERROR_MESSAGE);

}

}

});
JTextField tf2 = new JTextField("TextField2");
getContentPane().add(tf2, BorderLayout.SOUTH);

WindowListener l = new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);
}

class PassVerifier extends InputVerifier {

public boolean verify(JComponent input) {
JTextField tf = (JTextField) input;
tf.postActionEvent();

return true;
}
}

public static void main(String[] args) {
Frame f = new VerifierTest();
f.pack();
f.setVisible(true);
}
}

}

[/HIGHLIGHT]

einfahc enter drücken dann popt der dialog 2 mal hoch...
das gleiche passier auch wenn man einen focuslistener verwendet...
 

Ebenius

Top Contributor
mit dem InputVerifier ist das problem halt wenn man eine falsche eingabe macht kommt man aus dem feld heraus und MUSS das richtige eingeben wenn der User aber nicht weiß was er eingeben soll oder merkt er hat was vergessen und die Aktion abbrechen möchte kommt er halt nicht mehr aus dem textfeld heraus... find ich net ganz praktikabel
Stimmt so nicht; das hängt doch vom Verifier ab, den Du selber baust. [HIGHLIGHT="Java"]static void checkTextFieldText(final JTextField textField) {
if ("Richtig".equals(textField.getText())) {
textField.setBackground(Color.GREEN);
} else {
textField.setBackground(Color.RED);
JOptionPane.showMessageDialog(textField, "\"Richtig\" eingeben!");
}
}

public static void main(String[] args) {
final JTextField textField = new JTextField(25);
textField.setText("Richtig");
textField.setBackground(Color.GREEN);

textField.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
checkTextFieldText((JTextField) e.getSource());
}

});
textField.setInputVerifier(new InputVerifier() {

@Override
public boolean verify(JComponent input) {
checkTextFieldText(textField);
return true;
}
});

final JPanel panel = new JPanel(new BorderLayout(6, 6));
panel.add(textField, BorderLayout.CENTER);
panel.add(new JButton("Focusable Dummy"), BorderLayout.SOUTH);

final JFrame f = new JFrame("Input Verifier Fun");
f.setContentPane(new JScrollPane(panel));
f.pack();
f.setLocationRelativeTo(null);
f.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
f.setVisible(true);
}[/HIGHLIGHT]

EDIT: Ich hab das Zitat grad nochmal versucht zu verstehen. Mit jedem Lesen wird das unklarer... Was wolltest Du damit eigentlich sagen?

Ebenius
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Noch ein Hinweis am Rande: [HIGHLIGHT=Java]WindowListener l = new WindowAdapter() {

public void windowClosing(WindowEvent e) {
System.exit(0);
}
};
addWindowListener(l);[/HIGHLIGHT]
... kann man super ersetzen durch: [HIGHLIGHT=Java]setDefaultCloseOperation(EXIT_ON_CLOSE);[/HIGHLIGHT]
Ebenius
 
G

Gast2

Gast
ja das weiß ich =)... hab das Bsp. oben aus der API rauskopiert und ergänzt--> war zu faul ;)...

Vergess mein oberes zitat hab gemerkt dass wenn ich immer return true zurück gebe, das Focus Problem weg ist.

aber zu deinem Bsp. macht genau das gleiche wie meines.

Nimm einen falschen Wert und drück enter(führ die actionPerformed() methode aus)...
Dann kommt der Message Dialog 2 mal --> das ist das problem...
weil bevor die actionPerformed() methode fertig(genau da wo der andere Dialog kommt) ist wird mittendrin ein focusLost event geschmissen, was zu folge hat dass die verfiy methode aufgerufen wird und wir dann rekursiven aufruf haben...
 

Ebenius

Top Contributor
aber zu deinem Bsp. macht genau das gleiche wie meines.
Ja. Hab Dein Beispiel erst gesehen, nachdem ich meines gepostet hatte. :)

Nimm einen falschen Wert und drück enter(führ die actionPerformed() methode aus)...
Dann kommt der Message Dialog 2 mal --> das ist das problem...
weil bevor die actionPerformed() methode fertig(genau da wo der andere Dialog kommt) ist wird mittendrin ein focusLost event geschmissen, was zu folge hat dass die verfiy methode aufgerufen wird und wir dann rekursiven aufruf haben...
Das kann ich auf meinem System (Linux / KDE) weder mit Deinem noch mit meinem Beispiel nachvollziehen ???:L. Ich tippe (bei meinem Beispiel) "falsch" ein, drücke Enter, dann kommt der Dialog hoch. Getestet hab ich das eben mit JRE 6_10, JRE 6_7 und JRE 5_12.

EDIT: Ahhhh. Mit JRE 1.4.2_13 kann ich das nachvollziehen; StackOverflow! :)

Ebenius
 

Ebenius

Top Contributor
EDIT: Ahhhh. Mit JRE 1.4.2_13 kann ich das nachvollziehen; StackOverflow! :)
Wenn Du in meinem Beispiel die checkTextFieldText()-Methode so änderst, passiert's nicht mehr: [HIGHLIGHT="Java"]static void checkTextFieldText(final JTextField textField) {
if ("Richtig".equals(textField.getText())) {
textField.setBackground(Color.GREEN);
} else {
textField.setBackground(Color.RED);
final InputVerifier inputVerifier = textField.getInputVerifier();
try {
textField.setInputVerifier(null);
JOptionPane.showMessageDialog(textField, "\"Richtig\" eingeben!");
} finally {
textField.setInputVerifier(inputVerifier);
}
}
}[/HIGHLIGHT]
Ebenius
 
G

Gast2

Gast
heeee ??? Stack overflow???? des hab ich noch gar nicht hinbekommen =)
Nee bei mir kommt einfach 2 mal der message dialog ;)...
find ich auch logisch !!! actionPerfomed()-->ruft message dialog auf-->focusLost-->verify -->die sache nochmal....
versucht jre 1.6_11 und jdk 1.5_17 unter XP...
 
G

Gast2

Gast
Habs grad versucht... Klappt gut mit einem FocusListener würde es nicht funktionieren weil den kann man nicht auf null setzen... gefällt mir die lösung sieht sauberer aus wie meine jetzige =)...

dank dir
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
Dit_ Frage zum Thema SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 5
G Frage zu SwingUtilities.invokeLater AWT, Swing, JavaFX & SWT 9
E Frage zum Schieberegler JSlider AWT, Swing, JavaFX & SWT 5
thor_norsk Java - Allgemeine - Frage AWT, Swing, JavaFX & SWT 14
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 10
M Frage zu Java Bundesligaverwaltung AWT, Swing, JavaFX & SWT 7
thor_norsk Allgemeine Frage AWT, Swing, JavaFX & SWT 9
E Frage zum Textfeld AWT, Swing, JavaFX & SWT 8
H Swing JMenu aufgeklappt oder nicht - Wie frage ich das ab? AWT, Swing, JavaFX & SWT 5
pkm Frage wegen java.lang.IllegalStateException bei DocumentListener AWT, Swing, JavaFX & SWT 4
D Frage zu ActionListenern und AvtionEvents AWT, Swing, JavaFX & SWT 2
ralfb1105 JavaFX Daten zwischen Controllern austauschen- neue Frage AWT, Swing, JavaFX & SWT 7
F JavaFX Frage zum Logging AWT, Swing, JavaFX & SWT 6
E Prinzip: wie man Ereignisse in einer GUI verarbeit. Frage zum Design? AWT, Swing, JavaFX & SWT 10
ralfb1105 Swing Frage zu SwingWorker Verhalten bei cancel() AWT, Swing, JavaFX & SWT 2
J Frage zu setuserdata AWT, Swing, JavaFX & SWT 1
N Frage zu ListView AWT, Swing, JavaFX & SWT 11
L 2D-Grafik Frage zu Ellipse2D.Double, Abfrage, ob Punkt enthalten ist funktioniert nicht AWT, Swing, JavaFX & SWT 3
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
J Event Handling Frage zu der Funktion addActionListener AWT, Swing, JavaFX & SWT 2
J Frage zur objektorentierten Swing Programmierung AWT, Swing, JavaFX & SWT 10
T JavaFX Frage zum FX-Loader AWT, Swing, JavaFX & SWT 3
B drawRect Frage und Aufgabenstellung AWT, Swing, JavaFX & SWT 10
fLooojava GridLayout - Frage bezüglich Kachelgröße AWT, Swing, JavaFX & SWT 5
S Frage zu java.awt.EventQueue AWT, Swing, JavaFX & SWT 1
J Frage zu Java Projekt [2D Game] AWT, Swing, JavaFX & SWT 3
M Swing Grundlegende Frage zu SWING mit WindowBuilder AWT, Swing, JavaFX & SWT 11
M Frage zum Loggen von Fehlern AWT, Swing, JavaFX & SWT 3
T Swing API Frage zu Verzeichnisbäumen und JTree AWT, Swing, JavaFX & SWT 1
M Thread-Frage in SWT AWT, Swing, JavaFX & SWT 1
Q Cursor Frage AWT, Swing, JavaFX & SWT 8
W JavaFX TableView frage AWT, Swing, JavaFX & SWT 5
H Taschenrechnerprojekt in Javafx - Frage zu den Buttons in FXML AWT, Swing, JavaFX & SWT 1
I Grundsätzliche Frage zu ItemListener AWT, Swing, JavaFX & SWT 11
X Kurze Frage zu JPopup AWT, Swing, JavaFX & SWT 3
D Swing [Frage] ComboBox + Label AWT, Swing, JavaFX & SWT 3
D Frage zu JFrame und Graphics AWT, Swing, JavaFX & SWT 4
J Swing Frage zur Vorgehensweise (JTable?, JLabels?) AWT, Swing, JavaFX & SWT 8
S Frage zu Jtable / CellEditor AWT, Swing, JavaFX & SWT 1
kaoZ Frage zum einfügen von Componenten AWT, Swing, JavaFX & SWT 14
N Swing JTable anfänger frage AWT, Swing, JavaFX & SWT 2
S GridBagLayout-Frage AWT, Swing, JavaFX & SWT 1
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
F Swing JComboBox - Frage zur Größe AWT, Swing, JavaFX & SWT 11
G noch eine Frage zum EventDispachThread AWT, Swing, JavaFX & SWT 4
D MVC Frage AWT, Swing, JavaFX & SWT 6
Z Flackern trotz Offscreen Image / Doublebuffer, (+ Frage zu Pixelvergleich) AWT, Swing, JavaFX & SWT 25
GianaSisters 2D-Grafik BufferedImage.getSubimage - Frage AWT, Swing, JavaFX & SWT 7
M Frage zu KeyListener bzgl. JApplet AWT, Swing, JavaFX & SWT 3
M Frage zu Threads AWT, Swing, JavaFX & SWT 3
N Swing JComboBox Frage AWT, Swing, JavaFX & SWT 5
Luk10 g.drawString funktioniert nicht + Frage zur Text-Rendering Qualität AWT, Swing, JavaFX & SWT 7
Luk10 Frage zu Farb-Komposition AWT, Swing, JavaFX & SWT 9
K Gui Layout Frage AWT, Swing, JavaFX & SWT 5
V SWT Import Wizard - frage zur WizardPage AWT, Swing, JavaFX & SWT 5
N Swing Frage JXMapviewer AWT, Swing, JavaFX & SWT 4
GUI-Programmer Wieder ne Layout Frage AWT, Swing, JavaFX & SWT 11
GUI-Programmer LayoutManager Kurze Layout Frage - eine komponente mittig? AWT, Swing, JavaFX & SWT 5
lumo SWT Zeichnen bescheunigen bzw eine allg. Frage AWT, Swing, JavaFX & SWT 8
H Frage zu übergebenem Vector bzw. Boolean AWT, Swing, JavaFX & SWT 3
C 2D-Grafik BufferedImage laden, Frage zum Code AWT, Swing, JavaFX & SWT 2
VfL_Freak Swing Frage zu "new JPasswordField( 10 )" AWT, Swing, JavaFX & SWT 6
H Frage zu WindowBuilder Pro AWT, Swing, JavaFX & SWT 3
C Frage/Problem mit Jpanel AWT, Swing, JavaFX & SWT 4
S Frage zu TextArea AWT, Swing, JavaFX & SWT 2
GUI-Programmer Zeichnen in Swing - Frage AWT, Swing, JavaFX & SWT 6
Luk10 Frage zu Mouseevents AWT, Swing, JavaFX & SWT 7
J Refreshing Swing Frage AWT, Swing, JavaFX & SWT 10
F Frage zu Event KeyTyped bei jPanel AWT, Swing, JavaFX & SWT 4
A Frage zu StringBuilder AWT, Swing, JavaFX & SWT 2
S allg. Frage zur GUI-Architektur AWT, Swing, JavaFX & SWT 5
A Frage zu JDialog AWT, Swing, JavaFX & SWT 3
A Frage zur Methode matches() AWT, Swing, JavaFX & SWT 2
P LayoutManager Verständnis-Frage GridBagLayout AWT, Swing, JavaFX & SWT 7
H Allgemeine Frage zu Grafikfähigkeiten von Java AWT, Swing, JavaFX & SWT 24
D Repaint Frage, Design Frage AWT, Swing, JavaFX & SWT 2
Jats Frage zu JLabel & JTextField AWT, Swing, JavaFX & SWT 4
Y frage zu BufferedImage AWT, Swing, JavaFX & SWT 7
hdi Swing Frage zu invokeAndWait() Exceptions AWT, Swing, JavaFX & SWT 8
P Swing Frage zu paintComponent/getGraphics AWT, Swing, JavaFX & SWT 4
M Frage nach Swing Element AWT, Swing, JavaFX & SWT 3
S Frage zu Graphics2D AWT, Swing, JavaFX & SWT 3
T AWT Frage zu AWT AWT, Swing, JavaFX & SWT 5
B Frage zu Swing,Threads, SwingWorker und Socket Communikation AWT, Swing, JavaFX & SWT 4
F unspezifizierte Frage zu JTable/ Model AWT, Swing, JavaFX & SWT 6
B SWT Frage zu MVC und Data-Binding AWT, Swing, JavaFX & SWT 8
T LookAndFeel Look and Feel Frage AWT, Swing, JavaFX & SWT 2
J Java2D Kreis/Kurven Frage AWT, Swing, JavaFX & SWT 2
P Kurze Frage zur Gestaltung eines vertikalen Menüs AWT, Swing, JavaFX & SWT 2
Eldorado Frage zur Anwendung des MVC-Konzept AWT, Swing, JavaFX & SWT 33
G Frage zu processMouseEvent AWT, Swing, JavaFX & SWT 6
M Zoomen in ein JPanel... und eine andere kleine Frage AWT, Swing, JavaFX & SWT 3
D Swing implementierungs-technische Frage zu JList/AbstractListModel AWT, Swing, JavaFX & SWT 7
C Event Frage AWT, Swing, JavaFX & SWT 7
A Frage zu GridLayout AWT, Swing, JavaFX & SWT 4
F Frage zu WindowListeners AWT, Swing, JavaFX & SWT 2
E einfache Frage:warum ist Hintergrund grau ? AWT, Swing, JavaFX & SWT 24
E einfache Frage zu paintComponent und Graphics AWT, Swing, JavaFX & SWT 7
C Frage zu ActionListenern AWT, Swing, JavaFX & SWT 7
D Frage @ someActionEvent.getActionCommand() AWT, Swing, JavaFX & SWT 2

Ähnliche Java Themen


Oben