簡體   English   中英

無法在java中的類中調用void方法

[英]Cant call a void method in a class in java

我正在嘗試調用另一個類中的方法,但是,出現錯誤。 我將類初始化為一個變量,但我沒有選擇調用該方法。 當我開始打字時,甚至變量都沒有出現在自動完成中。

這是我正在打電話的課程:

public class aMessageBuffer {


private Collection<Message> messageBuffer = new ArrayList<Message>();
private Collection<Integer> responseBuffer = new ArrayList<Integer>();

private boolean messageBufferFull = false;
private boolean responseBufferFull =  false;


//Called by aProducerTask
public void sendMsg(String op, int val){
    //place message in messageBuffer
    Message msg = new Message();
    msg.setValues(op,val);
    messageBuffer.add(msg);

    messageBufferFull = true;

    //todo: notify
    while (responseBufferFull == false){
        //wait...
    }
    //remove response from responseBuffer
    responseBuffer.clear();

    responseBufferFull = false;

    //todo: Out Response
}
}

這就是我調用它的地方:

public class aProducerTask extends Thread {
    //TODO: Send Messages
    private aMessageBuffer msgbuf = new aMessageBuffer();
    msgbuf.sendMsg("add",3);

    //TODO: Print Results
}

我在msgbuf.sendMsg("add",3);收到錯誤msgbuf.sendMsg("add",3); 它不允許我使用該變量調用該方法

這是我的主要內容:

public class Main{
    public static void main(String args[]){
        new aConsumerTask().start();
        new aProducerTask().start();
    }

    public void run() {


    }
    }

您應該在類 aProducerTask 中定義 run 方法。

public class aProducerTask extends Thread {
    //TODO: Send Messages
    private aMessageBuffer msgbuf = new aMessageBuffer();

    public void run() {
        msgbuf.send("add",3);
    }

    //TODO: Print Results
}
  1. 不要在類中和任何方法、構造函數或類似塊之外裸調用非賦值方法。
  2. 在這里,您需要在run方法中調用非賦值方法。
  3. 不要擴展 Thread,實現 Runnable 並給它一個run方法來保存你的方法調用。 然后在需要的時候創建一個新的Thread,傳入Runnable並在Thread上調用start()
  4. 您將需要學習和使用Java 命名約定 變量名應全部以小寫字母開頭,而類名應以大寫字母開頭。 學習這一點並遵循這一點將使我們能夠更好地理解您的代碼,並使您更好地理解其他人的代碼。
  5. 將來,如果您對編譯錯誤有類似的問題,請將完整的錯誤消息與您的問題一起發布,並請校對您的代碼以確保正確性。 我們對問題的 90% 的評論都是關於澄清和更正的。

所以不是:

public class aProducerTask extends Thread {
    //TODO: Send Messages
    private aMessageBuffer msgbuf = new aMessageBuffer();
    msgbuf.sendMsg("add",3);

    //TODO: Print Results
}

而是這個:

// improve class name and have it implement Runnable    
public class AProducerTask implements Runnable {
    private aMessageBuffer msgbuf = new aMessageBuffer();

    @Override // don't forget this!
    public void run() {
        msgbuf.sendMsg("add",3);
    }
}    

然后使用:

public new Thread(new AProducerTask()).start();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM