在java中不能在类中调用void方法

在java中不能在类中调用void方法,java,void,Java,Void,我试图调用另一个类中的方法,但是,我得到了一个错误。我将该类初始化为一个变量,但没有调用该方法的选项。当我开始键入时,甚至变量都不会显示在自动完成中 这是我要呼叫的班级: public class aMessageBuffer { private Collection<Message> messageBuffer = new ArrayList<Message>(); private Collection<Integer> responseBuffer =

我试图调用另一个类中的方法,但是,我得到了一个错误。我将该类初始化为一个变量,但没有调用该方法的选项。当我开始键入时,甚至变量都不会显示在自动完成中

这是我要呼叫的班级:

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
}
}
我在msgbuf.sendMsgadd中得到错误,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
}
不要在类内和任何方法、构造函数或类似块外裸调用非赋值方法。 在这里,您需要在run方法中调用non-assignment方法。 不要扩展线程,实现Runnable并给它一个run方法,它将保存您的方法调用。然后在需要时创建一个新线程,传入Runnable并调用该线程的start。 你会想要学习和使用。变量名都应该以小写字母开头,而类名应该以大写字母开头。学习这一点并遵循这一点可以让我们更好地理解您的代码,也可以让您更好地理解其他人的代码。 将来,如果您对编译错误有类似的问题,请将完整的错误消息与您的问题一起发布,并请校对代码的正确性。我们对问题的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();

您的sendMsg方法在哪里sendMsg方法是什么?在询问之前,请先校对您的代码。它将为每个人节省大量时间。您声明的函数称为send。叫那个,在那里。。。很抱歉,我正在更改方法名称,以确保我没有与其他名为send的方法冲突。我已经更新了aMessageBufferOK中的方法名,现在您正在类中调用一个裸方法。应该在run方法中调用它。这里是基本Java101。接下来,您甚至不应该扩展线程,而是应该实现Runnable,而且调用应该在方法内部进行,再次是run方法,而不是在类中进行。
public new Thread(new AProducerTask()).start();