M
Malcolm
Gast
Hallo,
kann mir einer von euch sagen warum es bei folgendem Programm nicht möglich invokeLater() einfach durch invokeAndWait() zu ersetzen?
kann mir einer von euch sagen warum es bei folgendem Programm nicht möglich invokeLater() einfach durch invokeAndWait() zu ersetzen?
Code:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class DelayedActionPerformed extends JFrame implements ActionListener
{
private JLabel label;
private JSlider slider;
private Thread1 thread1;
private boolean wechsel;
public DelayedActionPerformed()
{
super("Beispiel für länger dauernden ActionListener");
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
Container cont = getContentPane();
cont.setLayout(new GridLayout(0, 1));
label = new JLabel();
cont.add(label);
slider = new JSlider(0, 20, 10);
slider.setPaintTicks(true);
slider.setPaintLabels(true);
slider.setMajorTickSpacing(5);
slider.setMinorTickSpacing(1);
cont.add(slider);
JButton button = new JButton("Drück mich");
button.addActionListener(this);
cont.add(button);
pack();
setVisible(true);
}
public void setText()
{
wechsel =! wechsel;
if(wechsel == true)
label.setText(" actionPerformed wurde gestartet");
else
label.setText(" actionPerformed wurde beendet");
}
public int getValue()
{
return slider.getValue();
}
public void actionPerformed(ActionEvent evt)
{
thread1 = new Thread1(this);
}
public static void main(String[] args)
{
new DelayedActionPerformed();
}
}
import javax.swing.*;
public class Thread1 extends Thread
{
private DelayedActionPerformed dap;
private Thread2 thread2;
public Thread1(DelayedActionPerformed dap)
{
this.dap = dap;
thread2 = new Thread2(dap);
start();
}
public void run()
{
SwingUtilities.invokeLater(thread2);
System.out.println("actionPerformed: Start");
try
{
Thread.sleep(dap.getValue()*1000);
}
catch(InterruptedException e)
{
}
System.out.println("actionPerformed: Ende");
SwingUtilities.invokeLater(thread2);
}
}
public class Thread2 implements Runnable
{
private DelayedActionPerformed dap;
private int value;
public Thread2(DelayedActionPerformed dap)
{
this.dap = dap;
}
public void run()
{
dap.setText();
}
}