从Runnable接口内的另一个程序调用一个程序时出现异常

时间:2015-06-11 14:07:08

标签: java

我正在尝试从Task3程序调用另一个程序并尝试在预定时间执行它时遇到问题。在第14行获得例外如下。

请通过Runnable界面的run方法告诉我调用程序出错的地方。

  

Task3.java:14:错误:未报告的异常异常;必须被抓住或声明       被抛出      Mult.main(new String [0]);

import java.util.Timer;
import java.util.TimerTask;

public class Task3 {

  public static void main(String[] args) {
    TimerTask task = new TimerTask() {
      @Override
      public void run() {
        // task to run goes here
        System.out.println("Hello !!!");
        Mult.main(new String[0]);
      }
    };

    Timer timer = new Timer();
    long delay = 0;
    long intevalPeriod = 1 * 1000; 

    // schedules the task to be run in an interval 
    timer.scheduleAtFixedRate(task, delay,
                                intevalPeriod);

  } // end of main
}

3 个答案:

答案 0 :(得分:2)

Mult.main有一个throws子句,其中包含一个已检查的异常,因此对于编译器要接受的代码,您需要将该异常添加到throws子句中run方法或捕获异常。但是,您不能将该异常添加到throws子句中,因为您覆盖了TimerTask.run,它声明没有例外。

唯一剩下的选择是捕获该错误或更改Mult.main以不抛出任何非RuntimeException子类的异常。你可以,例如如果发生异常,则捕获异常并抛出运行时异常或执行其他操作:

TimerTask task = new TimerTask() {
    @Override
    public void run() {
        // task to run goes here
        System.out.println("Hello !!!");
        try {
            Mult.main(new String[0]);
        } catch (Exception ex) {
            // handle the exception,
            // in this case by throwing a RuntimeException with ex as cause
            throw new IllegalStateException("I didn't expect a exception.", ex);
        }
    }
};

答案 1 :(得分:1)

这是编译时错误。您的方法Mult.main()可以抛出Exception

用try / catch包围它以处理错误,例如

try {
    Mult.main(new String[0]);
} catch (Exception e) {
    // Handle your error here
}

答案 2 :(得分:0)

没有更多代码就很难分辨,但看起来像是:

Mult.main(...)被定义为抛出异常,在这种情况下,调用的代码必须处理异常。

或者:

  1. 在try-catch块中包含对Mult.main(...)的调用,或
  2. 定义Task3.main(...)以抛出异常
  3. P.S。或者也许它是timer.scheduleAtFixedRate(...),没有行号就无法说明