我正在编码,打开Windows计算器,但编译器发出错误:
未报告的异常IOException;必须被抓住或宣布被抛出。
如果我针对ActionListener
方法写入抛出,则不会覆盖它。
部分代码:
else if(e.getActionCommand().equals("Window Calculator")) {
Runtime.getRuntime().exec("calc");
}
答案 0 :(得分:2)
您需要处理Runtime.getRuntime().exec("calc");
。
试试这个:
else if(e.getActionCommand().equals("Window Calculator")){
try
{
Runtime.getRuntime().exec("calc");
}
catch(IOException ioe)
{
ioe.printStackTrace();
}
}
来自OP评论:
If i catch the exception,how will it help..the code that i want to use will not be executed by this
这不会帮助您运行导致异常的代码,但即使发生异常,它也可以帮助您运行程序的其他部分。
答案 1 :(得分:1)
您需要在编译时处理已检查的异常或抛出它们。但是,如果抛出新的或更广泛的检查异常而不是超级方法或接口方法,那么它违反了覆盖或接口实现规则。所以你有唯一的选择在你的代码中处理它们。
注意: - 在您的情况下,您可以处理已检查的异常并吞下它们或将其包装在未经检查的异常(运行时异常)周围并抛出运行时异常。您可以始终抛出一个新的未经检查的(运行时异常)你的超类或接口方法
答案 2 :(得分:1)
您无法将throws
声明添加到重写方法,因为这会更改方法的签名。请改用try {} catch {}
。
答案 3 :(得分:0)
使用try / catch块在本地处理已检查的异常。请查看Jenkov's Tutorial有关该主题的简短教程。
要从Java启动外部程序,您可以使用ProcessBuilder。 Runtime.getRuntime()。exec()在内部执行相同的操作。在此thread
中对此进行了更多讨论