NoSuchMethodError:tools.Timer。<init>(J)V </init>

时间:2012-06-06 14:29:01

标签: java multithreading exception init

我有一个Timer类和一个Test类来测试这个计时器:

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;
    }
}

测试类:

public class Test 
{
    public static void main(String[] args) 
    {
        Timer myTimer = new Timer(10000);
        myTimer.start();

        while(myTimer.isRunning)
        {
            System.out.println("Running");
            try {
                Thread.sleep(1000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}

在Eclipse中,这很有效。当我将它包含在Solaris服务器上的另一个项目中时,我得到以下异常:

Exception in thread "main" java.lang.NoSuchMethodError: tools.Timer.<init>(J)V 

我用谷歌搜索了但我找不到任何答案 - 为什么这不起作用?干杯,蒂姆。

2 个答案:

答案 0 :(得分:1)

你正在构建这样的计时器:

Timer myTimer = new Timer();

你的构造函数声明是:

public Timer(long aTimeout)
很明显,不是吗?您必须构建像new Timer(1234)这样的计时器,或者向其添加无参数构造函数。

答案 1 :(得分:0)

您显示的代码甚至不应该编译,因为您调用了Timer()默认构造函数,但是Timer只有一个参数化构造函数:public Timer(long aTimeout)

因此,要么您没有向我们展示SSCCE,要么您对“效果良好”的定义与我们的明显不同; - )