我想让我的程序执行此安装程序(SnakeInstaller.exe
)。我正在使用Runtime
类,但我得到一个未处理的IOException
,当我运行代码时出现错误:
线程中的异常" AWT-EventQueue-0" java.lang.Error:未解决的编译问题:未处理的异常类型IOException"。
我尝试过使用throw IOException
,但它只是给了我一个错误。
public Board() {
//This sets the color for the score label and where it is going it be.
setLayout(null);
scoreLabel.setForeground(Color.white);
add(scoreLabel);
scoreLabel.setBounds(625, 665, 100, 50);
//This sets the color for the info label and where it is going it be.
infoLabel.setForeground(Color.white);
add(infoLabel);
infoLabel.setBounds(5, 665, 500, 50);
difficultyLabel.setForeground(Color.white);
add(difficultyLabel);
difficultyLabel.setBounds(600,650,100,50);
//This starts the key listener and sets the background color of the JPanel.
addKeyListener(new TAdapter());
setBackground(Color.black);
setFocusable(true);
//This sets the size of the board.
setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));
//Goes the the loadImages method and difficulty method.
loadImages();
difficulty();
Runtime.getRuntime().exec("X:/Snake/SnakeInstaller.exe");
}
答案 0 :(得分:0)
尽管您仍然遇到编译错误,但您尝试运行程序。这是异常告诉你的。
编译错误是Runtime.getRuntime().exec(...)
可以抛出IOException,并且你必须对它做一些事情(因为它是所谓的"已检查的异常"):
Board()
构造函数的throws子句中声明它,就像在public Board() throws IOException {
中一样。当然,这同样适用于使用构造函数new Board()
的地方。然后,该方法还必须获得throws IOException
子句,依此类推,直到最高级别,通常是main()
方法。catch(IOException ex)
部分做什么。我猜你的程序无法在没有运行SnakeInstaller的情况下继续运行。所以一个好的方法可能是throw new RuntimeException(ex);
那里(这个是"未经检查",这意味着你可以抛出它而不声明它)。这样可以确保程序不会无声地继续,产生废话,并且原始异常的信息(例如堆栈跟踪)仍然可供您检查。另一种方法是执行ex.printStacktrace();
和System.exit(1);
或者,如果您知道如何在没有SnakeInstaller的情况下继续操作,只需向用户显示警告消息。当然,还有很多其他选项,所以我建议阅读Java的异常系统(学习理论)和关于该主题的许多stackoverflow问题(至了解良好的使用模式。)
详细解释throw new RuntimeException(ex)
方法:
public Board() {
//This sets the color for the score label and where it is going it be.
setLayout(null);
scoreLabel.setForeground(Color.white);
add(scoreLabel);
scoreLabel.setBounds(625, 665, 100, 50);
//This sets the color for the info label and where it is going it be.
infoLabel.setForeground(Color.white);
add(infoLabel);
infoLabel.setBounds(5, 665, 500, 50);
difficultyLabel.setForeground(Color.white);
add(difficultyLabel);
difficultyLabel.setBounds(600,650,100,50);
//This starts the key listener and sets the background color of the JPanel.
addKeyListener(new TAdapter());
setBackground(Color.black);
setFocusable(true);
//This sets the size of the board.
setPreferredSize(new Dimension(B_WIDTH, B_HEIGHT));
//Goes the the loadImages method and difficulty method.
loadImages();
difficulty();
try {
Runtime.getRuntime().exec("X:/Snake/SnakeInstaller.exe");
} catch (IOException ex) {
throw new RuntimeException(ex);
}
}