2015-06-21 59 views
-4

,我與它的問題:在主類我創建了一個對象獲取對象的其他類instancied在Java中

District d = new District(district, sequence);

這個主類創建另一個線程。

該線程時訪問對象的實例無法做到這一點,只有當變量是靜態的,因爲如果不是,出現此消息:非靜態變量不能從靜態上下文引用。

我的問題是:我不能使用靜態字段,並且我在Main類中有一個無限循環,也就是說我也不能使用get方法。

如何訪問在主類中創建的對象?或者,另一方面,爲什麼我不能使用非靜態字段訪問參數?

請考慮此之外的任何解決方案成爲可能,甚至創造新的類/方法/變量。

Output output = new Output(client); 
     Thread to = new Thread(output); 
     to.start(); 

     ++i; 
    } 

    while(true){ 

     for(i = 0; i < neighborhood.size(); ++i){ 
      //rand.nextInt((max+1) - min) + min; 
      Edge edge = new Edge(id, neighborhood.get(i), 
        rand.nextInt((10 + 1) - 1) + 1); 
      district.add(edge); 
     } 

     District d = new District(district, sequence); 

     ++sequence; 

     Thread.sleep(5000); 
    } 

和螺紋:

public class Output implements Runnable { 

private Socket client; 

// Construtor do metódo 
Output(Socket client) { 
    this.client = client; 
} 

@Override 
public void run() { 

    // Obtendo os objetos de controle do fluxo de comunicação 
    ObjectOutputStream output = null; 
    try { 
     output = new ObjectOutputStream(client.getOutputStream()); 
    } catch (IOException ex) { 
     Logger.getLogger(Input.class.getName()).log(Level.SEVERE, null, ex); 
    } 

    while(true){ 
     District district = new District(District.district, District.sequence); 
     try { 
      output.writeUnshared(district); 
      System.out.println("Objeto enviado"); 
      output.flush(); 
      output.reset(); 
     } catch (IOException ex) { 
      Logger.getLogger(Output.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     try { 
      Thread.sleep(5000); 
     } catch (InterruptedException ex) { 
      Logger.getLogger(Output.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 
} 

感謝。

+0

對不起,你有一些很多downvotes沒有任何解釋。但可能是因爲你沒有發佈你遇到的代碼。有實際的代碼來檢查是非常重要的。請閱讀[this](http://stackoverflow.com/help/mcve)獲取有關如何以一種方式發佈代碼的有用提示,以便您獲得更好的幫助。祝你好運。 – sstan

+0

現在添加代碼,謝謝。 – user3294746

+0

你快到了。你能確保至少發佈整個班級和方法嗎?例如,在你的第二塊中,我不清楚這是'Runnable'還是'Thread'的'run'方法或別的東西。我會檢查。 – sstan

回答

0

爲什麼不將區域作爲參數傳遞給Output構造函數?

public class Output implements Runnable { 

private Socket client; 
private District district; 

Output(Socket client, District district) { 
    this.client = client; 
    this.district = district; 
} 
+0

哦!我非常尷尬......這是一個很好的選擇,我之前沒有想過這個。但是,如果我有不同類型的多個對象,通過相同的輸出發送,它的工作?我也需要爲同一個客戶端發送另一個對象。 在另一個討論:http://stackoverflow.com/questions/12910350/how-to-send-an-object-over-tcp-in-java 該傢伙引用客戶端/服務器之間的模塊,這是有道理的我也是,因爲我爲許多客戶端發送相同的對象,並且這個客戶端也與其他服務器一起使用服務器。 – user3294746

+0

而且,如果我與套接字客戶端創建的輸出一個下課的時候,我想,是不是每一個我需要的新對象發送時間必然產生... – user3294746

相關問題