2016-04-21 92 views
-3

我试图在另一个类中调用方法,但是出现错误。我将这个类初始化为一个变量,但我没有选择调用该方法。当我开始输入时,甚至没有变量显示在自动完成中。无法在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() { 


    } 
    } 
+0

哪里是你的SENDMSG()方法 – ryekayo

+0

什么'SENDMSG '方法?请在询问之前校对你的代码。它会为每个人节省很多时间。 –

+0

您声明的函数称为send。称之为。 –

回答

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