package gui.run;
import java.awt.*;
public abstract class RunButton extends
javax.swing.JButton implements
java.awt.event.ActionListener, Runnable {
public RunButton(String label) {
this(label, null);
}
public RunButton(String l, javax.swing.Icon i) {
super(l, i);
addActionListener(this);
}
public RunButton(javax.swing.Icon i) {
this(null, i);
}
public RunButton() {
this(null, null);
}
private Thread t = null;
public void interrupt() {
t.interrupt();
}
public void actionPerformed(java.awt.event.ActionEvent e) {
t = new Thread(this);
t.start();
}
public static void main(String args[]) {
final RunButton sleepingButton = new RunButton("sleep") {
public void run() {
try {
Thread.sleep(2000);
System.out.println("alarm!");
} catch (InterruptedException ie) {
System.out.println("You woke me up!");
}
}
};
gui.ClosableJFrame cf =
new gui.ClosableJFrame("Wake up!");
java.awt.Container c = cf.getContentPane();
c.setLayout(new FlowLayout());
c.add(new RunButton("wake the sleeper") {
public void run() {
sleepingButton.interrupt();
}
});
c.add(sleepingButton);
cf.setSize(200, 200);
cf.show();
}
}