Java,无法从不同的类文件接收数据

时间:2012-02-08 14:24:36

标签: java

我创建了一个可以向函数发送一些数据的用户界面。但是,我在途中遇到了一些错误。我将详细解释一些我的编码。首先,我的函数将被调用,一些数据将被发送到另一个类文件。

这是我的用户界面代码(我已经检查过它并且工作正常)

private void startActionPerformed(java.awt.event.ActionEvent evt) {  
int x1 = 0;
int x2 = 0;                                     
test.sbutton(x1, x2);}

接下来,sbutton函数原始来自我的start.java文件。它会调用一个计时器功能。

public class Start {
Timer timer = new Timer();
   public void sbutton(final int x1, final int x2) {
          timer.scheduleAtFixedRate(new Cost() {
                public void active() {
                        super.run(x1, x2);
                         new Thread(new Runnable() {
                                   public void run() }{ //some function
          }).start();
 }
 }, 1*1000, 30*1000);

cost.class函数代码假设接收x1和x2。

public class Cost extends TimerTask{

// @Override
public void run(int x1, int x2) {
Calendar rightNow = Calendar.getInstance();
Integer hour = rightNow.get(Calendar.HOUR_OF_DAY);
Integer min = rightNow.get(Calendar.MINUTE);

if (hour== x1 && min == x2) {}

但是,我收到了一条错误消息,无法编译。我的错误消息是“成本不是抽象的,不会覆盖抽象方法run()”有人可以识别错误,我已经被困在这里超过4个小时。感谢所有帮助!

4 个答案:

答案 0 :(得分:1)

扩展TimerTask时,大多数提供run()方法的实现,该方法不带参数。你已经添加了两个参数x1和x2 ......

答案 1 :(得分:1)

您正在尝试重新定义Start类中的Cost类,这是不允许的。你可以尝试

Cost myArgument = new Cost();
timer.scheduleAtFixedRate(myArgument);

假设Cost将正确的类扩展为可接受的参数。如果需要传递x1和x2,请为Cost定义构造函数

Cost myArgument = new Cost(x1,x2);

答案 2 :(得分:1)

编译器错误源于Cost正在扩展TimerTask,并且它不会覆盖TimerTask的所有抽象方法。在这种情况下,这就是run方法。

要纠正编译错误,您需要制作成本摘要:

public abstract Cost extends TimerTask {
...

或实施方法:

public Cost extends TimerTask {

  @Override
  public void run() { // no arguments
     // your own run code
  }
...

现在,将x1和x2值传递给Cost对象取决于上面采用的方法。如果要使用抽象Cost类,可以使用覆盖run方法的匿名子类并使用x1,x2值:

timer.scheduleAtFixedRate(new Cost() {
    public void run() {
      // call your existing run(x1, x2) method
      run(x1, x2);
    }
},  1 * 1000, 30 * 1000);

如果选择直接在Cost中实现run方法,请在Cost上提供构造函数以接收值,并在以后调度程序调用run方法时使用它们

public Cost extends TimerTask {
  private final int x1;
  private final int x2;

  public Cost(int x1, x2) {
      super();
      this.x1 = x1;
      this.x2 = x2;
  }

  @Override
  public void run() {
      // call your existing run(x1, x2) method
      run(x1, x2);
  }
  ...

通过这种方法,调度变为:

timer.scheduleAtFixedRate(new Cost(x1, x2),  1 * 1000, 30 * 1000);

答案 3 :(得分:0)

TimerTask是一个Runnable,意味着您需要实现抽象方法void run()。 代码中的run方法具有错误的签名。