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();
}
}
Ответы
Ответ 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