Hallo,
ich bin mir nicht ganz sicher, ob ich einen Fehler mache, oder ob ich einen Bug gefunden habe. Unter bestimmten Voraussetzungen killt Java/Swing einen für KDE wichtigen Prozess (kwin).
Dazu habe ich zwar schon einen "diffusen" Thread erzeugt, konnte das Problem jetzt aber ganz gut eingrenzen:
Grob gesagt habe ich folgendes:
- ein JFrame mit einem Button, der ein zweites Fenster (JDialog) öffnet.
- Das zweite Fenster besitzt wieder einen Knopf, der ein Standard-JOptionPane (yes/no) öffnet.
Das ist schon alles (Code weiter unten).
Wenn ich das ganze starte, und in der Reihenfolge
- das zweite Fenster öffne,
- den Yes/No Dielog öffne,
- einen Knopf drücke und
- das zweite Fenster schließe,
schmiert nach vier, fünf Durchläufen kwin ab.
Ich bin nicht sehr Swing versiert - ist der Code so korrekt? Wenn ja, ist es wohl ein Fehler in KDE (und ich bin fein raus :wink: )
Vielen Dank für Eure Mühe,
Clemente
Die komplette Klasse:
ich bin mir nicht ganz sicher, ob ich einen Fehler mache, oder ob ich einen Bug gefunden habe. Unter bestimmten Voraussetzungen killt Java/Swing einen für KDE wichtigen Prozess (kwin).
Dazu habe ich zwar schon einen "diffusen" Thread erzeugt, konnte das Problem jetzt aber ganz gut eingrenzen:
Grob gesagt habe ich folgendes:
- ein JFrame mit einem Button, der ein zweites Fenster (JDialog) öffnet.
- Das zweite Fenster besitzt wieder einen Knopf, der ein Standard-JOptionPane (yes/no) öffnet.
Das ist schon alles (Code weiter unten).
Wenn ich das ganze starte, und in der Reihenfolge
- das zweite Fenster öffne,
- den Yes/No Dielog öffne,
- einen Knopf drücke und
- das zweite Fenster schließe,
schmiert nach vier, fünf Durchläufen kwin ab.
Ich bin nicht sehr Swing versiert - ist der Code so korrekt? Wenn ja, ist es wohl ein Fehler in KDE (und ich bin fein raus :wink: )
Vielen Dank für Eure Mühe,
Clemente
Die komplette Klasse:
Code:
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class TestGui extends JFrame {
private JDialog d = null;
/**
* Constructor and the following method create
* the first window. It contains a button that
* opens the second window.
*/
public TestGui() {
super();
JPanel jContentPane = new JPanel();
jContentPane.add(getJButton());
this.setContentPane(jContentPane);
}
private JButton getJButton() {
JButton jButton = new JButton();
jButton.setText("Open Dialog");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
d = getJDialog();
d.setVisible(true);
}
});
return jButton;
}
/**
* Following methods create the second window.
* It contains a button, that opens a standard
* yes/no dialogbox.
*/
private JDialog getJDialog() {
JDialog jDialog = new JDialog();
JPanel jContentPane = new JPanel();
jContentPane.add(getJButton1());
jDialog.setContentPane(jContentPane);
return jDialog;
}
private JButton getJButton1() {
JButton jButton = new JButton("Open next dialog");
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (JOptionPane.showConfirmDialog(null, "Bla, bla, bla", "Hi...",
JOptionPane.YES_NO_OPTION) == 0) {
System.out.println("Yes clicked...");
}
}
});
return jButton;
}
/**
* Starting the test gui...
*/
public static void main(String[] args) {
TestGui test = new TestGui();
test.setVisible(true);
}
}