2015-08-03 42 views
26

我最近升級到Windows 10,而在Windows 8.1中工作的JavaFX代碼似乎在10中凍結。我已將問題跟蹤到在對話框中打開ComboBox。這似乎凍結了任何JavaFX程序。其他人是否也有同樣的問題? (Windows 10計算機仍然很少,遠在這之間將很好地確認錯誤確實是JavaFX問題)JavaFX ComboBox在Windows 10上未響應

我附上了下面的示例代碼。在主要階段的組合框是好的,但當我打開一個對話框,並嘗試在那裏使用組合框,整個事情凍結。我使用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(); 

} 

} 
+2

相關JDK錯誤:https://bugs.openjdk.java.net/browse/JDK-8132897 – berry120

+1

我升級我的電腦和我的筆記本電腦到Windows 10,我的筆記本電腦,而不是存在這個問題我PC:\ –

+0

我注意到在錯誤報告來組合框中凍結似乎是一個階段內的問題,而我的問題迄今僅限於對話。那麼這是否意味着我們基本上堅持到新的jdk出現? – macster110

回答

16

按照bug report,一個臨時的解決方法是設置下面的系統屬性:

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

,或者在應用程序的代碼:

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

或者或者,「運行Windows講述人屏幕閱讀器(啓用輔助功能)」。

該錯誤似乎是在JDK 8u40中引入的,並會影響安裝並啓用觸摸屏的Windows 10系統。

一些快速測試似乎表明它解決了我的問題。

+0

這已被固定在JDK 8u72([參見下面的回答(https://stackoverflow.com/a/43266269/3357935)) –

1

我有同樣的問題與英特爾HD 4000

我可能有一個解決方案,但。我只是用ChoiceBox替換了我的應用程序中的每個組合框的用法。這並不理想,但對於像我這樣的小型應用程序來說,這可能是最好的選擇,直到甲骨文或英特爾一起採取行動。

6

正如在其他答案中提到的,這可能是一個與英特爾圖形處理器有關的錯誤,它似乎沒有被驅動程序更新解決。

但是,雖然此錯誤爲hopefully being fixed,但現在我建議添加一個事件,它將鼠標按下時重點放在組合框上,因此可以解決此問題。只需添加下面的代碼:

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

我已故的兩分錢,但我確認

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

(如發表@PingZing)

有沒有解決我的應用程序相同的問題。觸摸能力,僅僅通過....

Pen 'n touch Wacom bamboo create tablet 

這是給10的Windows觸控功能

+0

這應該留下來作爲評論PingZing的答案,而不是作爲一個獨立的答案。 –

1

升級到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. 運行Windows講述屏幕閱讀器禁用(可訪問性保持啓用狀態)。從刪除答案