2011-11-20 30 views
0

我正在嘗試java程序。在框架中啓動套接字連接的線程並繪製其信息

我的想法: 主類爲套接字連接啓動線程,主類也通過GUI啓動Frame。

package dialogsubsystem2; 

import InternetConnection.SocketConnectionThread; 

/** 
* 
* @author ACER 
*/ 
public class DialogSubsystemLauncher { 

    public SocketConnectionThread connectionSocket = new SocketConnectionThread("192.0.0.100", 2002); 

    public DialogSubsystemLauncher() { 

     /* Create and display the form */ 

     java.awt.EventQueue.invokeLater(new Runnable() { 

      @Override 
      public void run() { 
       new DialogSubsystemLayoutFrame().setVisible(true);     
      } 
     });   

     connectionSocket.start();   
    } 


    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 

     DialogSubsystemLauncher dlgLnch = new DialogSubsystemLauncher(); 


    } 
} 

創建的框架通過用戶的請求啓動另一個框架。

我想在所有框架的狀態欄上顯示有關套接字連接(來自套接字連接線程)的信息。 但我不能從幀訪問套接字連接線程。 我應該如何解決這個問題? 我應該如何啓動套接字連接線程才能從任何Frame訪問它?

+0

可能具有幀可以接收的套接字連接線程廣播信息。 – Nerdtron

+0

所有幀都在一臺PC內啓動,但所有幀都可以收到相同的信息。 –

回答

1

您需要其中一個對象具有對另一個的引用。我會指向具有對線程的響應的幀(因爲線程有時可能被I/O阻塞)。

只要讓Frame的構造函數接受一個線程對象並傳遞一個你創建的對象(或者向它添加一個set方法)。

編輯:

在回答在評論aclarations。

對於您創建的其他類(框架),您需要傳遞引用。

public class DialogSubsystemLayoutFrame extends JFrame { 
    // You store the reference here. 
    private SocketConnectionThread socketConnection = null; 

    public DialogSubsystemLayoutFrame(SocketConnectionThread socket) { 
    this.socketConnection = socket; 
    } 
} 

從那裏,你可以使用this.socketConnection任何地方類用它來操作。

+0

我以這種方式初始化類DialogSubsystemLauncher中的套接字連接線程 public static SocketConnectionThread connectionSocket = new SocketConnectionThread(「192.0.0.100」,2002); 現在我有來自任何幀的套接字連接線程。 這種方法有什麼限制嗎? –

+0

它的作品,但'靜態'是不好的風格,應該避免。如果明天你想要使用兩個連接線程,以及通知每個連接線的不同框架呢? – SJuan76

+0

對不起,我是java新手。你能解釋一下嗎?「只要讓框架的構造函數接受一個線程對象並通過你創建的那個」就更加詳細了。據我瞭解,每個Frame都有它自己的線程。這樣對嗎? –

0

創建自己的類來擴展Frame並在該類中初始化Socket線程。

相關問題