Browse Source

REPORT-76259 【迭代】【数据连接面板为空】概率出现编辑数据集一直加载中

【问题原因】远程设计下,数据集面板的初始化中有两个耗时操作(下拉框取数据连接、TableViewList根据下拉框值取连接对应的所有表),对应两个SwingWorker,设为A和B;数据集面板本身的展示过程也对应一个SwingWorker(需要查询此连接是否有权限),设为C;当C执行完后,会在done方法里调用数据集面板的setVisible方法以让它展示,如果此时A和B才执行完doInbackground,准备执行done的时候(done的执行是invokeLater的),C的面板先显示了,会导致它们的done方法会被已经显示的模态dialog给阻塞住,从而无法完成面板数据更新
【改动思路】将setVisible方法用invokeLater包一层,让A和B的done方法不被阻塞
【review建议】无
newui
Yvan 2 years ago
parent
commit
d5956e94cb
  1. 23
      designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

23
designer-base/src/main/java/com/fr/design/data/datapane/TableDataTreePane.java

@ -402,6 +402,17 @@ public class TableDataTreePane extends BasicTableDataTreePane {
*/
@Override
public void dgEdit(final AbstractTableDataPane<?> tableDataPane, String originalName, boolean isUpdate) {
dgEdit(tableDataPane, originalName, isUpdate, false);
}
/**
* 编辑面板
* @param tableDataPane 面板
* @param originalName 原始名字
* @param isUpdate
* @param showLater 是否立刻打开面板
*/
public void dgEdit(final AbstractTableDataPane<?> tableDataPane, String originalName, boolean isUpdate, boolean showLater) {
// 编辑时如果正在搜索,跳回原树
if (TableDataTreeSearchManager.getInstance().isInSearchMode()) {
TableDataTreeSearchManager.getInstance().outOfSearchMode();
@ -487,7 +498,15 @@ public class TableDataTreePane extends BasicTableDataTreePane {
doPropertyChange(dg, tdNamePanel, oldName);
}
});
dg.setVisible(true);
if (showLater) {
// 有些数据集(DBTableData)面板的初始化过程中是包含了SwingWorker处理(查询数据连接、查表等)的
// 如果这里直接setVisible,可能阻塞SwingWorker的done方法,导致面板渲染出现问题
SwingUtilities.invokeLater(() -> {
dg.setVisible(true);
});
} else {
dg.setVisible(true);
}
}
@Override
@ -1041,7 +1060,7 @@ public class TableDataTreePane extends BasicTableDataTreePane {
if (hasAuth) {
// 有权限时,关闭Loading面板,打开编辑面板
loadingDialog.setVisible(false);
dgEdit(tableDataPane, dsName, false);
dgEdit(tableDataPane, dsName, false, true);
} else {
// 无权限时,给出无权限提示
loadingPane.switchTo(TableDataLoadingPane.NO_AUTH_PANE_NAME);

Loading…
Cancel
Save