我创建了一个可以向函数发送一些数据的用户界面。但是,我在途中遇到了一些错误。我将详细解释一些我的编码。首先,我的函数将被调用,一些数据将被发送到另一个类文件。
这是我的用户界面代码(我已经检查过它并且工作正常)
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个小时。感谢所有帮助!
答案 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方法具有错误的签名。