我最近升级到了Windows 10,而在Windows 8.1中工作的JavaFX代码似乎在10中冻结。我已经跟踪到了在对话框中打开ComboBox的问题。 这似乎冻结了任何JavaFX程序。 其他人是否也有同样的问题? (Windows 10电脑仍然很less,所以会很好地确认错误确实是JavaFX的问题)
我附上了下面的示例代码。 在主要阶段的combobox是好的,但是当我打开一个对话框,并尝试在那里使用combobox,整个事情冻结。 我在Eclipse 4.4.0中使用Java 8u51
package javafxExamples; import java.util.ArrayList; import java.util.List; import java.util.Optional; import javafx.application.Application; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.ChoiceDialog; import javafx.scene.control.ComboBox; import javafx.scene.layout.BorderPane; import javafx.stage.Stage; public class ComboErrorTest extends Application { String[] list={"Jamie", "Arthur", "Gordon"}; private Stage stage; public static void main(String[] args) { launch(args); } @Override public void start(Stage stage) throws Exception { //create box in main stage. ComboBox<String> comboBox=new ComboBox<String>(); for (int i=0; i<list.length; i++){ comboBox.getItems().add(list[i]); } comboBox.getSelectionModel().select(list[0]); BorderPane pane = new BorderPane(comboBox); pane.setPrefSize(400, 250); //dialog bit List<String> choices = new ArrayList<>(); choices.add("a"); choices.add("b"); choices.add("c"); ChoiceDialog<String> dialog = new ChoiceDialog<>("b", choices); dialog.setTitle("Choice Dialog"); dialog.setHeaderText("Look, a Choice Dialog"); dialog.setContentText("Choose your letter:"); Button dialogButton=new Button("Open Dialog..."); dialogButton.setOnAction((action)->{ // Traditional way to get the response value. Optional<String> result = dialog.showAndWait(); if (result.isPresent()){ System.out.println("Your choice: " + result.get()); } }); pane.setBottom(dialogButton); Scene scene = new Scene(pane); stage.setTitle("ComboError Demo"); stage.setScene(scene); stage.show(); } }
根据错误报告 ,临时解决方法是设置以下系统属性:
java -Dglass.accessible.force=false ...
或者在应用程序的代码中:
System.setProperty("glass.accessible.force", "false");
或者,或者,“运行Windows讲述人屏幕阅读器(启用辅助功能)”。
该错误似乎是在JDK 8u40中引入的,并会影响安装和启用触摸屏的Windows 10系统。
一些快速测试似乎表明它解决了我的问题。
正如在其他答案中提到的,这可能是与英特尔图形处理器有关的错误,而且似乎无法通过驱动程序更新来解决。
不过,虽然这个错误有望得到解决 ,但现在我建议添加一个事件,它将鼠标按下时重点放在组合框上,从而解决问题。 只需添加下面的代码:
comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){ @Override public void handle(MouseEvent event) { comboBox.requestFocus(); } });
我遇到与英特尔HD 4000相同的问题。
我可能有一个解决方案。 我只是用ChoiceBox替换了我的应用程序中的每个组合框的用法。 这并不理想,但对于像我这样的小型应用程序来说,这可能是Oracle或英特尔一起行动之前的最佳选择。
TL; DR:升级到JDK 8u72或更新版本应该解决这个问题。
这是JDK 8u40中影响某些Windows 10触摸屏计算机的已知问题 。 单击一个离焦的ComboBox会导致程序无响应。 该问题已于2015年9月17日解决,这意味着在JDK 8u72之后的任何版本都不会发生此问题。
如果不能升级您的JDK,则有两种已知的解决方法 。
System.setProperty("glass.accessible.force", "false");
禁用辅助功能来运行您的应用程序System.setProperty("glass.accessible.force", "false");
我的两分钱,但我确认
System.setProperty("glass.accessible.force", "false");
(由@PingZing发布)
修复了我的应用程序相同的问题。 触摸能力只是由…
Pen 'n touch Wacom bamboo create tablet
这是给Windows 10的触摸功能