Java中main方法try/catch未抛异常却直接终止程序问题
问题分析与解决
首先别担心,你看到的 terminated Main (1) [Java Application] 其实是程序正常执行完毕的提示,不是程序崩溃或者异常终止哦!作为Java新手很容易把这个当成错误,其实这是IDE在告诉你:你的main方法已经执行完所有代码,程序自然退出了。
咱们来拆解你的代码:
@SuppressWarnings("null") public static void main(String[] args) { Robot robot = null; try { robot = new Robot(); } catch (AWTException e) { e.printStackTrace(); } }
- 你在try块里只做了一件事:实例化
Robot对象。如果这个过程没有抛出AWTException(也就是你的系统支持Robot类的功能),那么try块执行完后,main方法就没有其他代码要运行了,程序直接结束,IDE就会显示那个“terminated”提示。 - 至于catch块,只有当
new Robot()失败(比如系统不允许创建Robot实例、缺少相关权限)时才会触发,你说程序从未抛出异常,说明catch块根本没被执行到。
怎么让程序有实际动作?
如果你想看到Robot的功能效果,在实例化后加一些具体操作就行,比如移动鼠标或者模拟按键:
@SuppressWarnings("null") public static void main(String[] args) { Robot robot = null; try { robot = new Robot(); // 让鼠标移动到屏幕坐标(100,100)的位置 robot.mouseMove(100, 100); // 等待2秒,让你能看到鼠标移动的效果 Thread.sleep(2000); // 模拟按下并释放回车键 robot.keyPress(KeyEvent.VK_ENTER); robot.keyRelease(KeyEvent.VK_ENTER); } catch (AWTException e) { e.printStackTrace(); } catch (InterruptedException e) { // 处理sleep可能抛出的中断异常 e.printStackTrace(); } }
这样程序执行时会有实际的操作,不会立刻结束,你就能直观看到Robot的作用啦。
另外提醒一下:使用Robot类可能需要系统权限(比如在某些操作系统里需要允许程序控制输入设备),如果后续遇到异常,再去排查权限问题就好。
内容的提问来源于stack exchange,提问作者Lotsofpeople
相关产品推荐
相关产品推荐

