学习Runtime类中的exec()方法和destroy()方法时,调用了Thread类中的sleep方法,出现报错。
import java.io.IOException;
public class Exec_Destroy{
public static void main(String[] args) throws IOException {
Runtime rt = Runtime.getRuntime(); // 创建Runtime实例对象
Process process = rt.exec("notepad");//得到表示进程的Process对象
Thread.sleep(3000);//程序休眠3秒
process.destroy();//杀掉进程
}
}
报错信息如下:
Unhandled exception type InterruptedException
未处理的异常类型InterruptedException
查询得知:某些函数自带有捕捉异常,因此使用的时候,也需要处理下异常。
这里VS code提示了两种解决方法:
1.Add throws declaration
通过添加抛出声明解决报错,正确代码如下:
import java.io.IOException;
public class Exec_Destroy{
public static void main(String[] args) throws IOException, InterruptedException {
Runtime rt = Runtime.getRuntime(); // 创建Runtime实例对象
Process process = rt.exec("notepad");//得到表示进程的Process对象
Thread.sleep(3000);//程序休眠3秒
process.destroy();//杀掉进程
}
}
这里通过在main()方法中的抛出,将其和IOException一同抛出,解决掉了异常。
2.Surround with try/catch
通过用try/catch环绕的方法,处理了异常,正确代码如下:
import java.io.IOException;
public class Exec_Destroy{
public static void main(String[] args) throws IOException {
Runtime rt = Runtime.getRuntime(); // 创建Runtime实例对象
Process process = rt.exec("notepad");//得到表示进程的Process对象
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}//程序休眠3秒
process.destroy();//杀掉进程
}
}
这里使用VS code便捷的自动修改解决了问题,其提供了自动生成的抛出异常(方法一)和捕获块(方法二)。
运行结果:
打开记事本进程,三秒后关闭。
参考文章:
Unhandled exception: java.lang.InterruptedException 解决方法_chenmiao0924的博客-CSDN博客