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