javafx - 当我已经在方法中抛出错误时出现未处理的异常错误
问题描述
我正在尝试为 javafx 中的按钮设置鼠标释放事件。该程序附加到读取按钮数据的 excel 文件中。当我使用事件给它一个方法时,它会说未处理的错误异常,而我已经在两种方法中都抛出了错误。
@FXML
void initRecipes() throws IOException, InvalidFormatException {
File file = new File("src/main/resources/RecipeList/Recipes.xlsx");
String path = file.getAbsolutePath();
ExcelReader list = new ExcelReader(path);
int i = 10;
int sheetNo = 0;
categories.add(cheap);
categories.add(showstopper);
categories.add(quick);
categories.add(breakfast);
categories.add(deserts);
categories.add(salads);
for (HBox h : categories) {
for (int k = 0; k < list.getAmount(sheetNo); k++) {
String buttonId = Integer.toString(i) + Integer.toString(k + 1);
Button button = new Button(list.getName(buttonId, sheetNo));
button.setId(buttonId);
button.setStyle("-fx-background-image: url('" +
list.getImage(buttonId, sheetNo) + "')");
button.setPrefHeight(buttonHeight);
button.setPrefWidth(buttonWidth);
button.setOnMouseReleased(event -> changeScene(buttonId));
//Error occuring here ^^^^^
h.getChildren().add(button);
}
sheetNo++;
i += 10;
}
list.close();
}
void changeScene(String buttonId) throws IOException, InvalidFormatException {
File file = new File("src/main/resources/RecipeList/ingredients.xlsx");
String path = file.getAbsolutePath();
ExcelReader list = new ExcelReader(path);
SecondaryPresenter s = new SecondaryPresenter();
s.initialize();
}
我很不确定这是否是设置事件的正确方法,以及如果我已经抛出了它说我没有处理的 2 个错误,为什么它会显示此错误。有谁知道我做错了什么?谢谢
解决方案
void handle(T event)
由于您changeScene
有一个throws
包含非RuntimeException
s 异常的子句,因此 java 编译器确定此类异常不在您的 lambda 表达式中处理。lambda 表达式的结果与以下代码非常相似:
button.setOnMouseReleased(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
changeScene(buttonId);
}
});
在上面的代码中应该很容易看出该handle
方法没有正确处理抛出的异常changeScene
。
您需要try/catch
在 lambda 表达式的主体中添加 a:
button.setOnMouseReleased(event -> {
try {
changeScene(buttonId);
} catch (IOException | InvalidFormatException ex) {
// TODO: exception handling
}
});
推荐阅读
- c# - 在 C# 的 for 循环中设置自定义操作
- google-apps-script - 结合两个 onEdit 函数,每个函数都使用自己的数据为自己的工作表工作
- mysql - 优化MySql临时表更新查询
- flutter - Flutter - VSCode 没有完成飞镖代码,通过建议框自动完成选择小部件只是名称
- r - 根据先前的值和 data.table 中的另一个变量填充一个变量
- python - 等待正在运行的容器的正确异步方式
- asp.net-mvc - 如何在 asp.net mvc 中使用 ms graph api 更改 AD B2C 用户密码
- javascript - Angular 10 两次下载已编译的资产
- c# - 未使用 PayPal 响应更新的奇怪交易
- reactjs - 如何使用 React Hooks 将对象推送到数组中