JavaFX ComboBox在Windows 10上没有响应

时间:2015-08-03 12:12:53

标签: windows combobox javafx javafx-8 windows-10

我最近升级到Windows 10,在Windows 8.1中运行的JavaFX代码似乎在10中冻结。我已经跟踪了在对话框中打开ComboBox的问题。这似乎冻结了任何JavaFX程序。还有其他人有同样的问题吗? (Windows 10计算机仍然很少,所以很好地确认bug确实是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();

}

}

5 个答案:

答案 0 :(得分:17)

根据bug report,临时解决方法是设置以下系统属性:

java -Dglass.accessible.force=false ... 

或者,在应用程序的代码中:

System.setProperty("glass.accessible.force", "false");

或者,或者,“运行Windows讲述人屏幕阅读器(启用辅助功能)”。

该错误似乎已在JDK 8u40中引入,并影响安装并启用了触摸屏的Windows 10系统。

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

答案 1 :(得分:6)

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

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

comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){
    @Override
    public void handle(MouseEvent event) {
        comboBox.requestFocus();
    }
});

答案 2 :(得分:3)

升级到JDK 8u72 or newer可以解决问题。

这是JDK 8u40中的known issue,影响某些Windows 10触摸屏计算机。单击焦点不对的ComboBox会导致程序无响应。该问题于2015年9月17日得到解决,这意味着它不应该发生在JDK 8u72之后的任何版本上。

如果无法升级JDK,则可以two known workarounds

  1. 通过添加System.setProperty("glass.accessible.force", "false");
  2. 来禁用辅助功能来运行您的应用
  3. 运行Windows讲述人屏幕阅读器(已启用辅助功能)。

答案 3 :(得分:1)

我遇到与Intel HD 4000相同的问题。

我可能有一个解决方案。我刚用ChoiceBox替换了我的应用程序中ComboBox的每个用法。它并不理想,但对于像我这样的小型应用程序,它可能是最好的选择,直到甲骨文或英特尔一起采取行动。

答案 4 :(得分:-1)

我迟到了两分钱,但我确认了

System.setProperty("glass.accessible.force", "false");

(由@PingZing发布)

我的应用上修复了同样的问题。触摸能力简单地由......提供。

Pen 'n touch Wacom bamboo create tablet

即提供Windows 10触控功能