JavaFX ComboBox 在 Windows 10 上没有响应
JavaFX ComboBox not responding on Windows 10
我最近升级到 Windows 10,在 Windows 8.1 中工作的 JavaFX 代码似乎在 10 中冻结。我已经追踪到打开 ComboBox 的问题在一个对话框中。这似乎会冻结任何 JavaFX 程序。还有其他人有同样的问题吗? (Windows 10 台计算机仍然很少,所以最好确认错误确实是 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();
}
}
我在使用 Intel HD 4000 时遇到了同样的问题。
不过我可能有解决办法。我只是用 ChoiceBox 替换了我应用程序中 ComboBox 的所有用法。它并不理想,但对于像我这样的小型应用程序,在 Oracle 或 Intel 联合行动之前,它可能是最佳选择。
如其他答案中所述,这可能是与英特尔图形处理器有关的错误,似乎无法通过驱动程序更新来解决。
但是,虽然这个错误是 hopefully being fixed,但我现在建议添加一个事件,使组合框聚焦于鼠标按下,从而解决问题。只需添加以下代码:
comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
comboBox.requestFocus();
}
});
根据 bug report,临时解决方法是设置以下系统 属性:
java -Dglass.accessible.force=false ...
或者,在应用程序代码中:
System.setProperty("glass.accessible.force", "false");
或者,"Run the Windows Narrator screen reader (with accessibility left enabled)"。
该错误似乎已在 JDK 8u40 中引入,并影响 Windows 10 个安装并启用了触摸屏的系统。
一些快速测试似乎表明它解决了我的问题。
我晚了两分钱,但我确认
System.setProperty("glass.accessible.force", "false");
(由@PingZing 发布)
在我的应用程序上解决了同样的问题。触摸能力只是由....
Pen 'n touch Wacom bamboo create tablet
即提供 Windows 10 种触控功能
升级到 JDK 8u72 or newer 应该可以解决问题。
这是 JDK 8u40 中的 known issue,影响某些 Windows 10 台触摸屏计算机。单击失焦的 ComboBox 会导致程序停止响应。该问题已于 2015 年 9 月 17 日解决,这意味着它不应在 JDK 8u72.
之后的任何版本上发生
如果升级您的 JDK 不是一个选项,还有 two known workarounds。
- 运行 您的应用通过添加
System.setProperty("glass.accessible.force", "false");
禁用了辅助功能
- 运行 Windows 讲述人屏幕 reader(启用辅助功能)。
我最近升级到 Windows 10,在 Windows 8.1 中工作的 JavaFX 代码似乎在 10 中冻结。我已经追踪到打开 ComboBox 的问题在一个对话框中。这似乎会冻结任何 JavaFX 程序。还有其他人有同样的问题吗? (Windows 10 台计算机仍然很少,所以最好确认错误确实是 JavaFX 问题)
我在下面附上了示例代码。主舞台中的 ComboBox 很好,但是当我打开一个对话框并尝试在那里使用 ComboBox 时,整个过程都冻结了。我在 Eclipse 4.4.0
中使用 Java 8u51package 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();
}
}
我在使用 Intel HD 4000 时遇到了同样的问题。
不过我可能有解决办法。我只是用 ChoiceBox 替换了我应用程序中 ComboBox 的所有用法。它并不理想,但对于像我这样的小型应用程序,在 Oracle 或 Intel 联合行动之前,它可能是最佳选择。
如其他答案中所述,这可能是与英特尔图形处理器有关的错误,似乎无法通过驱动程序更新来解决。
但是,虽然这个错误是 hopefully being fixed,但我现在建议添加一个事件,使组合框聚焦于鼠标按下,从而解决问题。只需添加以下代码:
comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
comboBox.requestFocus();
}
});
根据 bug report,临时解决方法是设置以下系统 属性:
java -Dglass.accessible.force=false ...
或者,在应用程序代码中:
System.setProperty("glass.accessible.force", "false");
或者,"Run the Windows Narrator screen reader (with accessibility left enabled)"。
该错误似乎已在 JDK 8u40 中引入,并影响 Windows 10 个安装并启用了触摸屏的系统。
一些快速测试似乎表明它解决了我的问题。
我晚了两分钱,但我确认
System.setProperty("glass.accessible.force", "false");
(由@PingZing 发布)
在我的应用程序上解决了同样的问题。触摸能力只是由....
Pen 'n touch Wacom bamboo create tablet
即提供 Windows 10 种触控功能
升级到 JDK 8u72 or newer 应该可以解决问题。
这是 JDK 8u40 中的 known issue,影响某些 Windows 10 台触摸屏计算机。单击失焦的 ComboBox 会导致程序停止响应。该问题已于 2015 年 9 月 17 日解决,这意味着它不应在 JDK 8u72.
之后的任何版本上发生如果升级您的 JDK 不是一个选项,还有 two known workarounds。
- 运行 您的应用通过添加
System.setProperty("glass.accessible.force", "false");
禁用了辅助功能
- 运行 Windows 讲述人屏幕 reader(启用辅助功能)。