Java NoSuchMethodError:工具.计时器。<;初始化>;(J) 五
我有一个定时器类和一个测试类来测试这个定时器:Java NoSuchMethodError:工具.计时器。<;初始化>;(J) 五,java,multithreading,exception,init,Java,Multithreading,Exception,Init,我有一个定时器类和一个测试类来测试这个定时器: package tools; public class Timer extends Thread { public boolean isRunning = true; private long timeout = 0; public Timer(long aTimeout) { timeout = aTimeout; } // Run the Thread public
package tools;
public class Timer extends Thread
{
public boolean isRunning = true;
private long timeout = 0;
public Timer(long aTimeout)
{
timeout = aTimeout;
}
// Run the Thread
public void run()
{
int i = 1000;
while(i <= timeout)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i = i + 1000;
}
isRunning = false;
}
}
在Eclipse中,这很有效。当我将其包含到Solaris服务器上的另一个项目中时,会出现以下异常:
Exception in thread "main" java.lang.NoSuchMethodError: tools.Timer.<init>(J)V
线程“main”java.lang.NoSuchMethodError中出现异常:tools.Timer。(J)V
我在谷歌上搜索了一下,但我找不到任何答案——为什么这不起作用?干杯,蒂姆。你在构建这样的计时器:
Timer myTimer = new Timer();
您的构造函数声明是:
public Timer(long aTimeout)
很明显,不是吗?您必须像
new timer(1234)
那样构造计时器,或者向其添加无参数构造函数。您正在像这样构造计时器:
Timer myTimer = new Timer();
您的构造函数声明是:
public Timer(long aTimeout)
很明显,不是吗?您必须像
new timer(1234)
那样构造计时器,或者向其添加无参数构造函数。显示的代码甚至不应该编译,因为您正在调用timer()
默认构造函数,但是timer
只有一个参数化构造函数:公共计时器(long-aTimeout)
因此,要么你没有向我们展示一个,要么你对“工作良好”的定义与我们的定义大不相同;-) 您显示的代码甚至不应该编译,因为您正在调用
Timer()
默认构造函数,但是Timer
只有一个参数化构造函数:public Timer(long aTimeout)
因此,要么你没有向我们展示一个,要么你对“工作良好”的定义与我们的定义大不相同;-) 抱歉,我编辑了它-现在有一个值,我第一次忘记了它(旧的剪贴板值)。我做了另一个测试,现在可以工作了-我将超时值硬编码为10000,并删除了构造函数。是否是缺少默认构造函数导致了此错误?或者更确切地说是缺少构造函数参数。取决于您的透视图。@Tim,如果调用代码中有参数,原因可能是类版本不匹配?如果部署到服务器的
Timer
类中的构造函数与客户端代码中调用的构造函数不匹配。您好,则该类匹配,并且构造函数是正确的。我还是有问题。我只是想了解它:)抱歉,我编辑了它-现在有一个值,我第一次忘记了它(旧的剪贴板值)。我做了另一个测试,现在可以工作了-我硬编码超时值为10000,并删除了构造函数。是否是缺少默认构造函数导致了此错误?或者更确切地说是缺少构造函数参数。取决于您的透视图。@Tim,如果调用代码中有参数,原因可能是类版本不匹配?如果部署到服务器的Timer
类中的构造函数与客户端代码中调用的构造函数不匹配。您好,则该类匹配,并且构造函数是正确的。我还是有问题。我只是想理解:)