【问题标题】:Problem with Java TimerJava 定时器的问题
【发布时间】:2011-05-29 01:52:16
【问题描述】:

我遇到了一个奇怪的计时器问题...我的计时器在 NetBeans 中测试时可以正常工作,但是一旦我直接从终端(Ubuntu 10.4)编译和运行,应该每分钟执行一次的任务就会执行一次,再也不会执行......

这是我的代码:

public static void main(String[] args) throws SQLException
{
    // schedule db update task to occur every 15 mins
    Timer timer = new Timer();
    timer.scheduleAtFixedRate(new TimerTask ()
        {
            @Override public void run()
            {
                doUpdate();
            }
        } , 0, updateInterval * 1000 * 60 );
        System.out.print("Starting auto update @ ");

    // schedule cpu usage check to occur every 1 min
    Timer cpu = new Timer();
    cpu.scheduleAtFixedRate(new TimerTask ()
        {
            @Override public void run()
            {
                getCPU();
            }
        } , 0, cpuUpdateInterval * 1000 * 60 );
}

是不是我做错了什么?

【问题讨论】:

  • hmm 你调试过,检查过 cpuUpdateInterval 的值吗?他们可以有不同的价值观吗?这听起来可能取决于平台(VM)......
  • cpuUpdateInterval = 1。我在 ubuntu 的 netbeans 中运行它(没问题),然后从 jar 编译并运行(仅运行 doUpdate() 计时器)。我什至让它每次进入第二个计时器时都做一个 println 。它在第一次执行后永远不会被调用。
  • 我会在命令行和 Netbeans 中检查 Java 版本——您可以通过切换 Netbeans 用于运行您的应用程序的 JVM 来进行调试。
  • 这就是问题所在。 Netbeans 是 1.6.0,但 java -version 从终端返回的版本是 1.5.0。我更新了,一切都很好!

标签: java timer ubuntu-10.04


【解决方案1】:

getCPU() 是做什么的?如果它正在运行 JNA/JNI 代码或外部库,则可能是您的命令行设置中缺少该库。

【讨论】:

    【解决方案2】:

    使用此代码,

    import java.util.Timer;
    import java.util.TimerTask;
    
    /** @see http://stackoverflow.com/questions/4503829 */
    public class TimerTest {
    
        private static final int MAX = 8;
    
        public static void main(String[] args) {
            final Timer cpu = new Timer();
            cpu.scheduleAtFixedRate(new TimerTask() {
    
                private int count;
    
                @Override
                public void run() {
                    count++;
                    System.out.println("Count: " + count);
                    if (count == MAX) {
                        cpu.cancel();
                    }
                }
            }, 100, 1000);
        }
    }
    

    我得到了预期的结果:

    $ 运行 java版本 java版本“1.6.0_20” OpenJDK 运行时环境 (IcedTea6 1.9.2) (6b20-1.9.2-0ubuntu1~10.04.1) OpenJDK Client VM(build 19.0-b09,混合模式,共享) java定时器测试 计数:1 数量:2 数量:3 数量:4 计数:5 数量:6 计数:7 数量:8

    【讨论】:

      猜你喜欢
      • 2012-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多