在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();