Java 如何在已扩展线程的类中扩展JFrame
我有一个扩展Thread的类,需要在同一个类上扩展JFrame。既然Java中不可能有多重继承,那么如何在已经扩展了Thread的类中使用JFrame对象呢?而不是扩展Thread,您能让该类实现可运行吗?通过这种方式,您可以扩展JFrame,将其传递给线程Java 如何在已扩展线程的类中扩展JFrame,java,swing,inheritance,jframe,Java,Swing,Inheritance,Jframe,我有一个扩展Thread的类,需要在同一个类上扩展JFrame。既然Java中不可能有多重继承,那么如何在已经扩展了Thread的类中使用JFrame对象呢?而不是扩展Thread,您能让该类实现可运行吗?通过这种方式,您可以扩展JFrame,将其传递给线程 public class MyFrameThread extends JFrame implements Runnable { @Override public void run() { ... }
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();
}
您可以轻松地使用JFrames和线程,而无需扩展它们,正如大多数人所建议的,您通常最好不要扩展它们。扩展它们会将类绑定到JFrame,从而防止以后在JPanel、JDialog等中使用它。如果没有必要,为什么要这样限制自己?与其扩展JFrame或线程,不如使用composition,它的限制性要小得多:
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();
}
}
Swing GUI对象应仅在上构造和操作。为什么要扩展JFrame?为什么首先需要扩展JFrame?这通常是不必要的。请参阅关于扩展JFrame的问题:通常不应该扩展JFrame或线程。问题解决了。在generali am用java编写套接字程序时,扩展JFrame是个坏主意。我唯一的经验是在安卓系统中,所以JavaSwing与我习惯的不同。因此,我将不扩展JFrame,而是创建没有任何GUI的控制台应用程序。我这样做是为了测试一些稍后将在Android中使用的套接字代码。