我有一个扩展Thread的类,需要在同一个类上扩展JFrame。由于Java中不可能进行多重继承,如何在已经扩展Thread的类中使用JFrame对象?
答案 0 :(得分:13)
使用合成,而不是扩展JFrame或Thread,它的限制要少得多:
public class MyApplication {
JFrame applicationFrame;
Thread someThread;
MyApplication() {
SwingUtilities.invokeLater(new Runnable() {
@Override void run() {
applicationFrame = new JFrame();
// some more GUI initialization.
applicationFrame.setVisible(true);
}
});
someThread = new Thread(new Runnable() {
@Override void run() {
// do my work.
}
});
someThread.start();
}
public static void main(String... args) {
new MyApplication();
}
}
答案 1 :(得分:3)
你可以让类实现Runnable而不是扩展Thread吗?这样,您可以扩展JFrame,将其传递给Thread。
public class MyFrameThread extends JFrame implements Runnable {
@Override
public void run() {
...
}
}
public static void main(String... args) {
Thread myThread = new Thread(new MyFrameThread());
myThread.start();
myThread.join();
}
答案 2 :(得分:2)
您可以轻松使用JFrame和线程而不扩展它们,正如大多数人所建议的那样,您通常更好关闭而不是扩展它们。扩展它们会将你的类绑定到JFrame,阻止你以后在JPanel,JDialog等中使用它。为什么在没有必要的情况下限制自己?