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

时间:2016-04-21 02:18:11

标签: java void

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

这是我正在打电话的课程:

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() {


    }
    }

2 个答案:

答案 0 :(得分:2)

您应该在类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 :(得分:1)

  1. 不要在类中以及任何方法,构造函数或类似块之外调用非赋值方法。
  2. 您希望在run方法中调用非分配方法。
  3. 不要扩展Thread,实现Runnable并给它一个run方法来保存你的方法调用。然后在需要时创建一个新线程,传入Runnable并在线程上调用start()
  4. 您需要学习并使用Java naming conventions。变量名都应以较低的字母开头,而类名以大写字母开头。了解并遵循这一点将使我们能够更好地理解您的代码,并使您能够更好地理解其他代码。
  5. 将来如果您对编译错误有类似的疑问,请在问题中发布完整的错误消息,并请校对您的代码的正确性。我们对问题的评论中有90%是关于澄清和纠正的。
  6. 所以不是:

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