2013-02-08 58 views
1

我有一个扩展Thread的类,并且需要在同一个类上扩展JFrame。因为在Java中多重继承是不可能的,它如何在已经扩展了Thread的类的内部使用JFrame对象?如何在已扩展的类中扩展JFrame线程

+3

Swing GUI对象应该在[事件派发线程](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html)上的_only_上构建和操作。为什么要扩展'JFrame'? – trashgod

+6

为什么您需要首先扩展JFrame?通常没有必要。 –

+2

看到这个问题关于扩展JFrame:http://stackoverflow.com/questions/1143923/why-shouldnt-you-extend-jframe-and-other-components –

回答

12

不是扩展或者JFrame的或线程,使用组合物,它是少了很多限制:

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

有票! 1 +的投票,但希望它可以是100+ –

2

而不是扩展线程,你可以让类实现Runnable?这样,您可以扩展JFrame,将其传递给线程。

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

扩展JFrame是不好的主意一般 –

+0

我正在一个套接字程序在Java中。我唯一的经验是在Android中,所以java swing与我习惯的有所不同。所以不是扩展JFrame,而是使控制台应用程序没有任何GUI。我正在做这个测试我稍后会在Android中使用的套接字的一些代码。 – Kevik

1

您可以轻松地使用JFrames和线程不扩展它们,并且已建议大多数,你通常更好关闭扩展它们。扩展它们会将您的类绑定到JFrame,以防您在JPanel,JDialog等中使用它。为什么要限制自己,如果不是必要的话?

-2
在程序

,我刚才通过延长线我能使用的JFrame和幸还是不幸做其他UI组件。

+1

downvote:这是很好,你能够,但不幸的是没有回答这个问题。 (“怎么做?”) – xerx593