2013-02-08 121 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