ComboBox de JavaFX no responde en Windows 10
javafx-8 windows-10 (5)
Como se menciona en otras respuestas, es probable que se trate de un error relacionado con los procesadores gráficos Intel y parece que no se resuelve con una actualización del controlador.
Sin embargo, aunque se bugs.openjdk.java.net/browse/JDK-8132897 que este error se bugs.openjdk.java.net/browse/JDK-8132897 , por ahora recomiendo agregar un evento que enfoque el cuadro combinado al presionar el mouse y, por lo tanto, resuelve el problema. Simplemente agregue el siguiente código:
comboBox.setOnMousePressed(new EventHandler<MouseEvent>(){
@Override
public void handle(MouseEvent event) {
comboBox.requestFocus();
}
});
Recientemente me actualicé a Windows 10 y el código JavaFX que funcionaba en Windows 8.1 parece congelarse en 10. He rastreado el problema hasta abrir un ComboBox dentro de un cuadro de diálogo. Esto parece congelar cualquier programa JavaFX. ¿Alguien más tiene el mismo problema? (Las computadoras con Windows 10 aún son pocas y distantes, por lo que sería bueno confirmar que el error es realmente un problema JavaFX)
He adjuntado el código de ejemplo a continuación. El ComboBox en el escenario principal está bien, pero cuando abro un cuadro de diálogo y trato de usar el ComboBox allí, todo se congela. Estoy usando Java 8u51 en 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();
}
}
De acuerdo con el bugs.openjdk.java.net/browse/JDK-8132897 , una solución temporal está configurando la siguiente propiedad del sistema:
java -Dglass.accessible.force=false ...
o, en el código de una aplicación:
System.setProperty("glass.accessible.force", "false");
O, alternativamente, "Ejecute el lector de pantalla del Narrador de Windows (con la accesibilidad dejada habilitada)".
El error parece haberse introducido en JDK 8u40, y afecta a los sistemas Windows 10 con una pantalla táctil instalada y habilitada.
Algunas pruebas rápidas parecen indicar que me solucionó el problema.
Estoy teniendo el mismo problema con un Intel HD 4000.
Sin embargo, puedo tener una solución. Acabo de reemplazar cada uso de ComboBox en mi aplicación con ChoiceBox. No es ideal, pero para aplicaciones pequeñas como la mía, podría ser la mejor opción hasta que Oracle o Intel actúen juntos.
Mis últimos dos centavos, pero confirmo que
System.setProperty("glass.accessible.force", "false");
(Según publicado por @PingZing)
Solucioné el mismo problema en mi aplicación. La habilidad táctil fue simplemente dada por ...
Pen ''n touch Wacom bamboo create tablet
Eso está dando las capacidades táctiles de Windows 10
La actualización a JDK 8u72 o posterior debería solucionar el problema.
Este era un bugs.openjdk.java.net/browse/JDK-8132897 en JDK 8u40 que afectaba a ciertas computadoras con pantalla táctil de Windows 10. Al hacer clic en un ComboBox fuera de foco, los programas dejarían de responder. El problema se resolvió el 17 de septiembre de 2015, lo que significa que no debería ocurrir en ninguna versión posterior a JDK 8u72.
Si la actualización de su JDK no es una opción, existen dos soluciones conocidas .
- Ejecute su aplicación con la accesibilidad desactivada agregando
System.setProperty("glass.accessible.force", "false");
- Ejecute el lector de pantalla Narrador de Windows (con la accesibilidad dejada habilitada).