JavaFXTableView将屏幕冻结一段时间

JavaFXTableView将屏幕冻结一段时间,javafx,javafx-2,javafx-8,freeze,Javafx,Javafx 2,Javafx 8,Freeze,我是JavaFX新手,遇到了奇怪的行为,首先我将展示我的代码 public class FreezeFX extends Application { private VBox root; private HBox btnContainer; private Button addBtn, removeBtn; private TableView<Action> actionsTable; private TableColumn<Action, String> keywor

我是JavaFX新手,遇到了奇怪的行为,首先我将展示我的代码

public class FreezeFX extends Application {

private VBox root;
private HBox btnContainer;
private Button addBtn, removeBtn;
private TableView<Action> actionsTable;
private TableColumn<Action, String> keywordCol, pathCol;
private ObservableList<FreezeFX.Action> actionList;

public static void main(String[] args){
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    setupUI(primaryStage);
    bindData();
    primaryStage.show();
}

private void setupUI(Stage stage) {
    root = new VBox(10);
    root.setPadding(new Insets(10));
    btnContainer = new HBox(10);

    addBtn = new Button();
    addBtn.setText("Add Keyword");
    removeBtn = new Button("Remove Keyword");
    btnContainer.getChildren().addAll(addBtn, removeBtn);
    root.getChildren().add(btnContainer);

    actionsTable = new TableView<Action>();
    keywordCol = new TableColumn<Action, String>();
    keywordCol.setText("Keyword");
    keywordCol.setCellValueFactory(new PropertyValueFactory<Action, String>("keyword"));
    keywordCol.setPrefWidth(138);
    pathCol = new TableColumn<Action, String>();
    pathCol.setText("Path");
    pathCol.setCellValueFactory(new PropertyValueFactory<Action, String>("path"));
    pathCol.setPrefWidth(340);
    actionsTable.getColumns().addAll(keywordCol, pathCol);
    root.getChildren().add(actionsTable); 

    Scene scene = new Scene(root, 500, 500);
    stage.setScene(scene);
    stage.setTitle("Remote PC");
}

private void bindData(){
    actionList = FXCollections.observableArrayList();
    Action a1 = new Action("internet", "path1");
    Action a2 = new Action("winrar", "path2");
    actionList.addAll(a1,a2);
    actionsTable.setItems(actionList);
}

public class Action{
    private String keyword;
    private String path;

    public Action(String keyword, String path) {
        this.keyword = keyword;
        this.path = path;
    }

    public String getKeyword() {
        return keyword;
    }

    public void setKeyword(String keyword) {
        this.keyword = keyword;
    }

    public String getPath() {
        return path;
    }

    public void setPath(String path) {
        this.path = path;
    }
}
public类扩展应用程序{
私有VBox根;
私人HBox BTN容器;
专用按钮addBtn,removeBtn;
私人桌面视图操作稳定;
private TableColumn关键字col、pathCol;
私人观察者行动清单;
公共静态void main(字符串[]args){
发射(args);
}
@凌驾
public void start(Stage primaryStage)引发异常{
setupUI(初级阶段);
bindData();
primaryStage.show();
}
专用void setupUI(阶段){
根=新的VBox(10);
根。设置填充(新插图(10));
BTN容器=新的HBox(10);
addBtn=新按钮();
addBtn.setText(“添加关键字”);
removeBtn=新建按钮(“删除关键字”);
btnContainer.getChildren().addAll(addBtn,removeBtn);
root.getChildren().add(btnContainer);
actionsTable=新的TableView();
关键字col=newtablecolumn();
关键字col.setText(“关键字”);
关键字col.setCellValueFactory(新属性ValueFactory(“关键字”);
关键词col.setPrefWidth(138);
pathCol=新的TableColumn();
pathCol.setText(“路径”);
路径col.setCellValueFactory(新属性ValueFactory(“路径”);
路径列设置预宽(340);
actionsTable.getColumns().addAll(关键字col,路径col);
root.getChildren().add(actionsTable);
场景=新场景(根,500500);
舞台场景;
stage.setTitle(“远程PC”);
}
私有void bindData(){
actionList=FXCollections.observableArrayList();
行动a1=新行动(“互联网”、“路径1”);
动作a2=新动作(“winrar”、“路径2”);
actionList.addAll(a1、a2);
actionsTable.setItems(actionList);
}
公共集体诉讼{
私有字符串关键字;
私有字符串路径;
公共操作(字符串关键字、字符串路径){
this.keyword=关键字;
this.path=path;
}
公共字符串getKeyword(){
返回关键字;
}
public void setKeyword(字符串关键字){
this.keyword=关键字;
}
公共字符串getPath(){
返回路径;
}
公共void setPath(字符串路径){
this.path=path;
}
}
}

没有TableView,一切都可以正常工作。当我将TableView添加到场景中时,我遇到屏幕冻结(大约2秒),然后我收到Windows(Windows 10)的通知,几乎每次运行程序时都会显示“屏幕控制器停止响应,但正在重新工作”(我自己的波兰语翻译;))(是的,差不多10次中有9次)。控制台中没有任何错误,当我尝试单击应用程序窗口中的按钮、表格、标签等时会出现问题。在单击之前,应用程序工作正常,它属于服务器应用程序类型,能够接收来自客户端的消息并更新UI,当我单击前面提到的某个内容时,一切都会崩溃。如我所说,如果我不是将TableView添加到我的场景中,一切正常。 提前谢谢你的帮助

---编辑--- 因此,我用最少的代码更新了上面发布的代码,以重现问题。我还注意到:

1) 如果我不将btnContainer添加到根目录,一切都会正常工作

2) 如果我将btnContainer添加到根目录,如上面的代码所示,但移动此行
actionsTable.setItems(actionList)就在这一行下面
actionList=FXCollections.observableAryList()一切正常,但是tableView没有刷新其内容

--EDIT2---

3) 如果我首先添加actionsTable,而不是btnContainer,它工作正常,actionsTable会在需要时进行自我更新


我在东芝S55-85312上运行Windows 10,带有Intel HD Graphics 4600

请编辑问题以包含一个,这是一个最小的代码,用户可以复制粘贴以编译和复制问题,而无需进一步更改。完成,我还添加了两个奇怪的东西,这是我在试图解决Mac OS X(JDK 1.8.0_66)上无法复制的问题时看到的。也许这是一个长期的问题,但您的图形卡驱动程序是最新的吗?worksform(win7,jdk8u60)