JavaFXTableView将屏幕冻结一段时间
我是JavaFX新手,遇到了奇怪的行为,首先我将展示我的代码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
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)