2013-05-29 169 views
0
public class UDP implements Runnable { 

    private String host; 
    private int port; 
    private int delay; 
    private int timeout; 

    @Override 
    public void handlePacket(String host, int port, int delay, int timeout) { 
     UDP.host = host; 
     UDP.port = port; 
     UDP.delay = delay; 
     UDP.timeout = timeout; 
     Executors.newSingleThreadExecutor().execute(new UDP()); 
    } 

錯誤即時得到非靜態字段不能被引用到靜態語境 我不知道我應該做的,我知道一點Java,但我完全失去了Java的非靜態字段

+0

你剛剛永久泄露一個線程。 – SLaks

+2

這個問題通常涉及面向對象編程的一個基本的基本方面(不僅僅是Java)。在我看來,你應該看看在線Java教程或者任何優秀的Java站點來解答這個問題。你的第一本能本不應該是把這個問題發佈到SO上。 – scottb

+0

你應該使用'this',而不是'new UDP()'作爲'Executors.newSingleThreadExecutor()。execute()'的參數。 – EJP

回答

6

使用類名稱作爲前綴表示您正在嘗試使用靜態上下文。

要分配一個值實例變量,不與類名前綴它與this它的前綴:

this.host = host; 
... 

此外,使用this僅僅是必要的,因爲你命名你的參數一樣你的實例變量。

+0

非常感謝您的快速回復 –