Combobox 组合框崩溃javafx 8 JDK 51

Combobox 组合框崩溃javafx 8 JDK 51,combobox,javafx-8,Combobox,Javafx 8,所以我一直在使用ComboBox的程序已经停止工作了。在我将jdk从8u20更新到8u50之前,现在当运行同一个程序而不对其进行任何更改时,如果选择ComboBox而不首先对其进行Tab,则会导致程序冻结,然后崩溃 在搜索之后,我只在web上的另一个地方看到过这种情况,防止崩溃的唯一方法是按tab键,直到选择组合框,然后使用箭头键进行选择 还有人听说过吗 下面是一个示例,如果复制粘贴这两个类并运行main,则可以轻松运行该示例 主要类别: import javafx.application.Ap

所以我一直在使用ComboBox的程序已经停止工作了。在我将jdk从8u20更新到8u50之前,现在当运行同一个程序而不对其进行任何更改时,如果选择ComboBox而不首先对其进行Tab,则会导致程序冻结,然后崩溃

在搜索之后,我只在web上的另一个地方看到过这种情况,防止崩溃的唯一方法是按tab键,直到选择组合框,然后使用箭头键进行选择

还有人听说过吗

下面是一个示例,如果复制粘贴这两个类并运行main,则可以轻松运行该示例

主要类别:

import javafx.application.Application;
import javafx.stage.Stage;

import java.util.ArrayList;

/**
 * Created by Josh on 19/8/2015.
 */
public class Main extends Application {
    @Override
    public void start(Stage primaryStage) throws Exception {

        ArrayList<String> options = new ArrayList<String>();
        options.add("Apple");
        options.add("Orange");
        options.add("Pear");

        String result = Selection_Dialog.show(options, "Orange");

    }

    public static void main(String[] args) {
        launch(args);
    }
}
导入javafx.application.application;
导入javafx.stage.stage;
导入java.util.ArrayList;
/**
*由Josh于2015年8月19日创建。
*/
公共类主扩展应用程序{
@凌驾
public void start(Stage primaryStage)引发异常{
ArrayList选项=新建ArrayList();
选项。添加(“苹果”);
选项。添加(“橙色”);
选项。添加(“Pear”);
字符串结果=Selection_Dialog.show(选项,“橙色”);
}
公共静态void main(字符串[]args){
发射(args);
}
}
组合框类:

import com.sun.glass.ui.Screen;
import javafx.event.*;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.BorderPane;
import javafx.scene.text.TextAlignment;
import javafx.stage.Modality;
import javafx.stage.Stage;
import javafx.stage.StageStyle;

import java.awt.*;

import java.util.ArrayList;

class Selection_Dialog {

    //Window Properties
    private static final String TITLE = "Selection Dialog";
    private static String DEFAULT_MESSAGE = "";
    private static int DEFAULT_WIDTH = 400;
    private static int DEFAULT_HEIGHT = 250;
    private static Point DEFAULT_POSITION = new Point();

    //Window Components
    private static Stage stage;
    private static javafx.scene.control.Label messageLabel;
    private static javafx.scene.control.Button okButton;
    private static ComboBox selector;

    //Show Window Popup
    public static String show(ArrayList<String> options, String initial) {
        return show(options, initial, DEFAULT_MESSAGE, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_POSITION);
    }
    public static String show(ArrayList<String> options, String initial, String message) {
        return show(options, initial, message, DEFAULT_WIDTH, DEFAULT_HEIGHT, DEFAULT_POSITION);
    }
    public static String show(ArrayList<String> options, String initial, String message, Point position) {
        return show(options, initial, message, DEFAULT_WIDTH, DEFAULT_HEIGHT, position);
    }
    public static String show(ArrayList<String> options, String initial, String message, int width, int height) {
        return show(options, initial, message, width, height, DEFAULT_POSITION);
    }
    public static String show(ArrayList<String> options, String initial, String message, int width, int height, Point position) {

        //Setup Properties
        stage = new Stage();
        BorderPane root = new BorderPane();
        stage.initStyle(StageStyle.UTILITY);
        stage.initModality(Modality.APPLICATION_MODAL);
        stage.setScene(new Scene(root, width, height));
        stage.setTitle(TITLE);
        stage.setResizable(false);
        stage.setOnCloseRequest(new EventHandler() {
            @Override
            public void handle(javafx.event.Event event) {
                event.consume();
            }
        });
        if(position == DEFAULT_POSITION){
            int x, y;
            x = Screen.getMainScreen().getWidth()/2;
            y = Screen.getMainScreen().getHeight()/2;
            x = x - width/2;
            y = y - height/2;
            position = new Point(x, y);
        }
        stage.setX(position.getX());
        stage.setY(position.getY());


        //Create Components
        messageLabel = new javafx.scene.control.Label(message);
        okButton = new javafx.scene.control.Button("Ok");
        selector = new ComboBox();
        selector.getItems().addAll(options);
        if(options.size() > 0){
            if(initial == null){
                selector.getSelectionModel().select(0);
            }else if(options.contains(initial)){
                selector.getSelectionModel().select(initial);
            }else{
                selector.getSelectionModel().select(0);
            }

        }

        //Align Components
        root.setAlignment(messageLabel, Pos.CENTER);
        root.setAlignment(okButton, Pos.CENTER);
        messageLabel.setTranslateY(15);
        okButton.setTranslateY(-25);
        messageLabel.setTextAlignment(TextAlignment.CENTER);
        messageLabel.setWrapText(true);

        //Add Components
        root.setBottom(okButton);
        root.setTop(messageLabel);
        root.setCenter(selector);

        //Add Listeners

        okButton.setOnAction(new EventHandler<ActionEvent>() {
            @Override
            public void handle(ActionEvent event) {
                stage.close();
            }
        });

        //Show Window
        stage.showAndWait();

        return selector.getSelectionModel().getSelectedItem().toString();
    }

}
导入com.sun.glass.ui.Screen;
导入javafx.event.*;
导入javafx.geometry.Pos;
导入javafx.scene.scene;
导入javafx.scene.control.*;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.text.TextAlignment;
导入javafx.stage.model;
导入javafx.stage.stage;
导入javafx.stage.StageStyle;
导入java.awt.*;
导入java.util.ArrayList;
类选择对话框{
//窗口属性
私有静态最终字符串TITLE=“选择对话框”;
私有静态字符串DEFAULT_MESSAGE=“”;
私有静态int默认_宽度=400;
专用静态int默认值_高度=250;
私有静态点默认位置=新点();
//窗口组件
私有静态阶段;
私有静态javafx.scene.control.Label messageLabel;
私有静态javafx.scene.control.Button okButton;
专用静态组合框选择器;
//显示窗口弹出窗口
公共静态字符串显示(ArrayList选项,字符串首字母){
返回显示(选项、初始、默认消息、默认宽度、默认高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息){
返回显示(选项、首字母、消息、默认宽度、默认高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、点位置){
返回显示(选项、首字母、消息、默认宽度、默认高度、位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、整型宽度、整型高度){
返回显示(选项、首字母、消息、宽度、高度、默认位置);
}
公共静态字符串显示(ArrayList选项、字符串首字母、字符串消息、整数宽度、整数高度、点位置){
//设置属性
阶段=新阶段();
BorderPane根=新的BorderPane();
stage.initStyle(StageStyle.UTILITY);
阶段.初始模态(模态.应用\模态);
舞台场景(新场景(根、宽、高);
舞台。片名(片名);
阶段。可设置大小(假);
stage.setOnCloseRequest(新的EventHandler(){
@凌驾
公共无效句柄(javafx.event.event){
event.consume();
}
});
如果(位置==默认位置){
int x,y;
x=Screen.getMainScreen().getWidth()/2;
y=Screen.getMainScreen().getHeight()/2;
x=x-宽度/2;
y=y-高度/2;
位置=新点(x,y);
}
stage.setX(position.getX());
stage.setY(position.getY());
//创建组件
messageLabel=newjavafx.scene.control.Label(消息);
okButton=newjavafx.scene.control.Button(“确定”);
选择器=新组合框();
selector.getItems().addAll(选项);
如果(options.size()>0){
if(initial==null){
selector.getSelectionModel().select(0);
}else if(options.contains(首字母)){
selector.getSelectionModel().select(初始);
}否则{
selector.getSelectionModel().select(0);
}
}
//对齐组件
root.setAlignment(messageLabel,Pos.CENTER);
根设置对齐(OK按钮,位置中心);
messageLabel.setTranslateY(15);
okButton.setTranslateY(-25);
messageLabel.setTextAlignment(TextAlignment.CENTER);
messageLabel.setWrapText(true);
//添加组件
root.setBottom(确定按钮);
setTop(messageLabel);
root.setCenter(选择器);
//添加侦听器
setOnAction(新的EventHandler(){
@凌驾
公共无效句柄(ActionEvent事件){
stage.close();
}
});
//橱窗
stage.show和wait();
返回选择器.getSelectionModel().getSelectedItem().toString();
}
}

我创建了ComboBox类,以便在将来的项目中可以方便地从用户那里获得选择对话框。它以前工作得很好,可能是出了什么问题?

从未见过这样的行为(在8u60的ea版本中,没有u50,或者是有?)请显示一个SSCCE,演示问题,以便我可以尝试重现itI添加了我用于创建combobox和example Main的类,该类仅在combobox中放置3个选项,并将结果存储在字符串中。很抱歉,我的意思是更新51NEW DISCOVERY:我替换了“combobox”的每个实例,并将其替换为“ChoiceBox”现在它工作得完美无缺。这真的很奇怪。与组合框相比,选择框显得有些蹩脚:(嗯……无法复制(使用8u60b18)-可能太旧了(比u51早一个cou)