JavaFX组合框在Windows 10上没有响应

JavaFX组合框在Windows 10上没有响应,windows,combobox,javafx,javafx-8,windows-10,Windows,Combobox,Javafx,Javafx 8,Windows 10,我最近升级到了Windows10,在Windows8.1中运行的JavaFX代码似乎在10年内冻结了。我一直在追踪这个问题,直到在对话框中打开一个组合框。这似乎冻结了任何JavaFX程序。其他人也有同样的问题吗?(Windows 10计算机仍然很少,所以最好确认这个bug确实是JavaFX问题) 我在下面附上了示例代码。主阶段中的组合框很好,但是当我打开一个对话框并尝试在那里使用组合框时,整个过程都冻结了。我在Eclipse4.4.0中使用Java8U51 package javafxExamp

我最近升级到了Windows10,在Windows8.1中运行的JavaFX代码似乎在10年内冻结了。我一直在追踪这个问题,直到在对话框中打开一个组合框。这似乎冻结了任何JavaFX程序。其他人也有同样的问题吗?(Windows 10计算机仍然很少,所以最好确认这个bug确实是JavaFX问题)

我在下面附上了示例代码。主阶段中的组合框很好,但是当我打开一个对话框并尝试在那里使用组合框时,整个过程都冻结了。我在Eclipse4.4.0中使用Java8U51

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();

}

}
包javafxExamples;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Optional;
导入javafx.application.application;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.ChoiceDialog;
导入javafx.scene.control.ComboBox;
导入javafx.scene.layout.BorderPane;
导入javafx.stage.stage;
公共类ComboErrorTest扩展应用程序{
String[]list={“Jamie”、“Arthur”、“Gordon”};
私人舞台;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage)引发异常{
//在主阶段中创建长方体。
ComboBox ComboBox=新建ComboBox();
对于(int i=0;i{
//获取响应值的传统方法。
可选结果=dialog.showAndWait();
if(result.isPresent()){
System.out.println(“您的选择:+result.get());
}
});
窗格.setBottom(对话框按钮);
场景=新场景(窗格);
stage.setTitle(“ComboError Demo”);
舞台场景;
stage.show();
}
}

我的英特尔HD 4000也有同样的问题


不过我可能有个解决办法。我只是用ChoiceBox替换了应用程序中ComboBox的所有用法。这并不理想,但对于像我这样的小型应用程序来说,在Oracle或Intel齐心协力之前,这可能是最好的选择

如其他答案中所述,这可能与英特尔图形处理器有关,而且似乎无法通过驱动程序更新解决

然而,虽然这个错误是存在的,但现在我建议添加一个事件,将组合框的焦点放在鼠标按下上,从而解决问题。只需添加以下代码:

comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        comboBox.requestFocus();
    }
});
comboBox.setOnMousePressed(新的EventHandler(){
@凌驾
公共无效句柄(MouseeEvent事件){
requestFocus();
}
});
根据,临时解决方法是设置以下系统属性:

java -Dglass.accessible.force=false ... 
或者,在应用程序的代码中:

System.setProperty("glass.accessible.force", "false");
或者,“运行Windows叙述者屏幕阅读器(启用辅助功能)”

该漏洞似乎是在JDK 8u40中引入的,它会影响安装并启用触摸屏的Windows 10系统


一些快速测试似乎表明它解决了我的问题。

我迟到了两分钱,但我确实证实了这一点

System.setProperty("glass.accessible.force", "false");
(由@PingZing发布)

在我的应用程序上修复了相同的问题。触摸能力只是由……赋予的

Pen 'n touch Wacom bamboo create tablet
这将使Windows 10 touch功能升级到可以解决此问题。

这是JDK 8u40中影响某些Windows 10触摸屏计算机的一个问题。单击“失焦”组合框会导致程序无响应。该问题于2015年9月17日得到解决,这意味着JDK 8u72之后的任何版本都不应出现这种情况

如果升级JDK不是一个选项,那么有

  • 通过添加
    System.setProperty(“glass.accessible.force”、“false”),在禁用可访问性的情况下运行应用程序
  • 运行Windows叙述者屏幕阅读器(启用辅助功能)

  • 删除答案中的相关JDK错误:我将我的PC和笔记本电脑升级到Windows 10。这个问题存在于我的笔记本电脑上,而不是我的电脑上:\n我在错误报告中注意到,组合框冻结似乎是一个阶段内的问题,而我的问题目前仅限于对话框。那么,这是否意味着在新的jdk问世之前,我们基本上都会陷入困境呢?对于运行windows 10和8u60的我来说,这是一个同样的问题,但只有在连接了触摸屏的情况下才会出现。如果我拔下触摸屏的USB电缆,combobx工作正常……这在JDK 8u72()中已修复。这应该作为PingZing答案的注释,而不是作为独立答案。