无法在 java 中的 class 中调用 void 方法

Cant call a void method in a class in java

我正在尝试调用另一个 class 中的方法,但是出现错误。我将 class 初始化为一个变量,但我没有获得调用该方法的选项。当我开始输入时,甚至变量都没有出现在自动完成中。

这是 class 我正在打电话:

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); 中收到错误 它不允许我用那个变量调用方法

这是我的主要内容:

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

    public void run() {


    }
    }

您应该在 class aProducerTask 中定义 运行 方法。

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

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

    //TODO: Print Results
}
  1. 不要在 class 中和任何方法、构造函数或类似块之外调用非赋值方法。
  2. 这里你要调用run方法中的非赋值方法。
  3. 不要扩展 Thread,实现 Runnable 并给它一个 run 方法来保持你的方法调用。然后在需要的时候新建一个Thread,传入Runnable,在Thread上调用start()
  4. 您将想要学习和使用 Java naming conventions。变量名称应全部以小写字母开头,而 class 名称应以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他人的代码。
  5. 以后如果您有关于编译错误的类似问题,post 完整的错误消息和您的问题,请校对您的代码以确保正确性。我们对问题的评论中 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();