考虑以下代码:
Thread.setDefaultUncaughtExceptionHandler((Thread t, Throwable e) -> {
System.out.println("An exception occurred!");
});
// set the exception handler for the JavaFX application thread
Thread.currentThread().setUncaughtExceptionHandler((Thread t, Throwable e) -> {
System.out.println("An exception occurred!");
});
Task<?> task = new Task() {
@Override
public Void call() throws Exception {
throw new RuntimeException("foobar");
};
};
new Thread(task).start();
Run Code Online (Sandbox Code Playgroud)
如果我们运行代码,运行时异常永远不会触发默认的异常处理程序,而是由任务使用.我找到的唯一抵消这种方法的方法是在task.setOnFailed中重新抛出异常:
task.setOnFailed((WorkerStateEvent t) -> {
throw new RuntimeException(task.getException());
});
Run Code Online (Sandbox Code Playgroud)
既然JavaFX 8现在支持UncaughtExceptionHandler,为什么不将异常传播到异常处理程序?
我有一个表格单元工厂负责在JavaFX TableView中创建可编辑单元格.
我正在尝试为tableview实现一些附加功能,以便当用户在可编辑单元格外部单击时进行提交(编辑的文本将被保存,而不会根据默认的tableview行为进行丢弃.)
我添加了一个textField.focusedProperty()事件处理程序,我从文本字段提交文本.但是,当一个单击外部时,当前单元格cancelEdit()被调用并且调用commitEdit(textField.getText());无效.
我已经意识到,一旦cancelEdit()被称为TableCell.isEditing()返回false,所以提交永远不会发生.
如何在用户点击可编辑单元格外部时提交文本?
提交setOnEditCommit()事件处理程序后,将处理验证和数据库逻辑.我没有把它包含在这里,因为它很可能会使事情进一步复杂化.
// EditingCell - for editing capability in a TableCell
public static class EditingCell extends TableCell<Person, String> {
private TextField textField;
public EditingCell() {
}
@Override public void startEdit() {
super.startEdit();
if (textField == null) {
createTextField();
}
setText(null);
setGraphic(textField);
textField.selectAll();
}
@Override public void cancelEdit() {
super.cancelEdit();
setText((String) getItem());
setGraphic(null);
}
@Override public void updateItem(String item, boolean empty) {
super.updateItem(item, empty); …Run Code Online (Sandbox Code Playgroud) 我在互联网上搜索了这个错误.有人告诉我,我的电脑缺少lib xml for php.但我不知道如何在Ubuntu 12.04 TLS上安装它.