Подтвердить что ты не робот

JavaFX ComboBox не отвечает на Windows 10

Недавно я обновил код Windows 10 и JavaFX, который работал в Windows 8.1, замерзает в 10 раз. Я отследил проблему до открытия ComboBox в диалоговом окне. Это, похоже, затормозит любую программу JavaFX. Кто-нибудь еще имеет такую ​​же проблему? (Компьютеры с Windows 10 по-прежнему мало и далеко друг от друга, поэтому было бы неплохо подтвердить, что ошибка - это проблема JavaFX)

Я привел пример кода ниже. ComboBox на главной сцене отлично, но когда я открываю диалог и пытаюсь использовать ComboBox там, все это зависает. Я использую Java 8u51 в Eclipse 4.4.0

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

}

}
4b9b3361

Ответ 1

Согласно отчету об ошибке , временное обходное решение устанавливает следующее системное свойство:

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

или, в коде приложения:

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

Или, поочередно, "Запустите программу чтения сценариев Windows (с включенной доступностью)".

Ошибка появилась в JDK 8u40 и влияет на системы Windows 10 с установленным и включенным сенсорным экраном.

Некоторые быстрые тесты, похоже, указывают на то, что он решил проблему для меня.

Ответ 2

Как упоминалось в других ответах, это, вероятно, ошибка, связанная с графическими процессорами Intel, и она, похоже, не решена обновлением драйвера.

Однако, хотя эта ошибка надеюсь, будет исправлена ​​, на данный момент я рекомендую добавить событие, которое фокусирует combobox на мышь, и поэтому решает проблема. Просто добавьте код ниже:

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

Ответ 3

У меня такая же проблема с Intel HD 4000.

У меня может быть решение. Я просто заменил каждое использование ComboBox в своем приложении ChoiceBox. Это не идеально, но для небольших приложений, подобных моим, это может быть лучшим вариантом, пока Oracle или Intel не начнут действовать вместе.

Ответ 4

TL; DR: Обновление до JDK 8u72 или более новое должно устранить проблему.


Это была известная проблема в JDK 8u40, затрагивающая некоторые компьютеры с сенсорным экраном Windows 10. Щелчок на фокусе ComboBox заставит программы перестать отвечать на запросы. Проблема была решена 17 сентября 2015 года, то есть это не должно происходить ни с одной версией после JDK 8u72.

Если обновление JDK не является вариантом, два известных обхода.

  • Запустите приложение с отключенным доступом, добавив System.setProperty("glass.accessible.force", "false");
  • Запустите программу чтения сценариев Windows (с включенной доступностью).

Ответ 5

Мои последние два цента, но я подтверждаю, что

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

(Как опубликовано @PingZing)

Устранила ту же проблему в моем приложении. Способность касания была просто задана....

Pen 'n touch Wacom bamboo create tablet

Это дает возможности для Windows 10 touch