Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,无法从不同的类文件接收数据_Java - Fatal编程技术网

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

Java,无法从不同的类文件接收数据,java,Java,我创建了一个用户界面,可以向函数发送一些数据。然而,我在过程中遇到了一些错误。我将详细解释我的一些编码。首先,将调用我的函数,并将一些数据发送到另一个类文件 这是我的用户界面代码(我已经检查过了,效果很好) 接下来,sbutton函数来自我的start.java文件。它将在中调用计时器函数 public class Start { Timer timer = new Timer(); public void sbutton(final int x1, final int 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) {}

但是,我收到一条错误消息,无法编译。我的错误消息是“Cost不是抽象的,并且不会覆盖抽象方法run()”。如果有人能识别错误,我已经在这里停留了4个多小时。感谢您的帮助

TimerTask是可运行的,这意味着您需要实现抽象方法
void run()

代码中的run方法具有错误的签名。

TimerTask是可运行的,这意味着您需要实现抽象方法
void run()

代码中的run方法具有错误的签名。

扩展TimerTask时,您最多为run()方法提供不带参数的实现。扩展TimerTask时,添加了两个参数x1和x2…

,它提供了不带参数的run()方法的实现。您添加了两个参数x1和x2…

您试图在Start类中重新定义成本类,这是不允许的。你可以试试

Cost myArgument = new Cost();
timer.scheduleAtFixedRate(myArgument);
假设Cost扩展了正确的类,使其成为可接受的参数。如果需要通过x1和x2,请为成本定义一个构造函数

Cost myArgument = new Cost(x1,x2);

您试图在Start类中重新定义成本类,这是不允许的。你可以试试

Cost myArgument = new Cost();
timer.scheduleAtFixedRate(myArgument);
假设Cost扩展了正确的类,使其成为可接受的参数。如果需要通过x1和x2,请为成本定义一个构造函数

Cost myArgument = new Cost(x1,x2);

编译器错误源于扩展TimerTask的成本,并且它不会覆盖TimerTask的所有抽象方法。在本例中,这就是run方法

要更正编译错误,您需要将成本抽象化:

public abstract Cost extends TimerTask {
...
或实施该方法:

public Cost extends TimerTask {

  @Override
  public void run() { // no arguments
     // your own run code
  }
...
现在,将x1和x2值传递给成本对象取决于上述方法。如果要使用抽象成本类,可以使用覆盖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);

编译器错误源于扩展TimerTask的成本,并且它不会覆盖TimerTask的所有抽象方法。在本例中,这就是run方法

要更正编译错误,您需要将成本抽象化:

public abstract Cost extends TimerTask {
...
或实施该方法:

public Cost extends TimerTask {

  @Override
  public void run() { // no arguments
     // your own run code
  }
...
现在,将x1和x2值传递给成本对象取决于上述方法。如果要使用抽象成本类,可以使用覆盖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);

我认为这是错误的答案。显然,必须实现TimerTask的抽象run()方法。我认为这是错误的答案。显然,必须实现TimerTask的抽象run()方法。添加x1和x2是因为我想向run()提供值,以便可以将此数据发送到Cost。添加run()x1和x2是因为我想向run()提供值,以便可以将此数据发送到Cost。run()我在放置run(x1,x2)时仍然存在抽象错误?我试图将run的参数保留为空,但线程无法工作new Thread(new Runnable(){public void run()}当我选择使用第二个时,似乎没有运行method@Eugene您不应该需要线程匿名内部类。一旦您使用计时器计划了成本任务,计时器就有责任调用成本#run()方法。您不需要创建单独的线程来启动或操作计时器。@Eugene要清除问题,请将原始的run(x1,x2)方法重命名为doRun(x1,x2)。然后,您的成本类应实现TimerTask#run()方法,如下所示:public void run(){doRun(x1,x2);}我在放置run(x1,x2)时仍然存在抽象错误?我尝试将run的参数保留为空,但线程无法运行new Thread(new Runnable(){public void run()}当我选择使用第二个时,似乎没有运行method@Eugene您不应该需要线程匿名内部类。一旦您使用计时器计划了成本任务,计时器就有责任调用成本#run()方法。您不需要创建单独的线程来启动或操作计时器。@Eugene要清除问题,请将原始的run(x1,x2)方法重命名为doRun(x1,x2)。然后,您的成本类应实现TimerTask#run()方法,如下所示:public void run(){doRun(x1,x2);}