Browse Source

REPORT-32939 设计器正常2g目前经常出现排队现象

feature/big-screen
hades 4 years ago
parent
commit
3854aba922
  1. 36
      designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java
  2. 16
      designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

36
designer-base/src/main/java/com/fr/design/file/HistoryTemplateListCache.java

@ -42,6 +42,14 @@ public class HistoryTemplateListCache implements CallbackEvent {
private List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate;
/**
* 当设计器打开的模板数大于模板缓存对象个数时会产生JVirtualTemplate(个数=打开的总模板数 - 缓存模板数)
* 每次点击切换模板时当切换到JVirtualTemplate会创建真实的JTemplate但是该JTemplate创建后不会释放掉需要调用whenClose主动释放
* 该变量对JVirtualTemplate创建真实的JTemplate管理
*/
private JTemplate<?, ?> currentVirtualReplaceTemplate;
public static HistoryTemplateListCache getInstance() {
return Holder.INSTANCE;
}
@ -112,6 +120,14 @@ public class HistoryTemplateListCache implements CallbackEvent {
* @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate)
*/
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) {
// 模板之间切换 如果存在上次JVirtualTemplate创建的真实模板 需要在此关闭,并释放掉
boolean canReleaseVirtualReplaceTemplate = this.currentVirtualReplaceTemplate != null && jt != null
&& !ComparatorUtils.equals(this.currentVirtualReplaceTemplate.getEditingFILE(), jt.getEditingFILE());
if (canReleaseVirtualReplaceTemplate) {
HistoryTemplateListCache.getInstance().releaseVirtualReplaceTemplate();
}
this.editingTemplate = jt;
//如果当前历史面板中没有
@ -423,4 +439,24 @@ public class HistoryTemplateListCache implements CallbackEvent {
}
}
public void setCurrentVirtualReplaceTemplate(JTemplate<?, ?> currentVirtualReplaceTemplate) {
// 保证先释放
releaseVirtualReplaceTemplate();
this.currentVirtualReplaceTemplate = currentVirtualReplaceTemplate;
}
public JTemplate<?, ?> getCurrentVirtualReplaceTemplate() {
return currentVirtualReplaceTemplate;
}
/**
* 释放JVirtualTemplate创建的真实模板JTemplate
*/
private void releaseVirtualReplaceTemplate() {
if (this.currentVirtualReplaceTemplate != null) {
this.currentVirtualReplaceTemplate.whenClose();
this.currentVirtualReplaceTemplate = null;
}
}
}

16
designer-base/src/main/java/com/fr/design/mainframe/DesignerFrame.java

@ -1101,11 +1101,19 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
*/
private void openFile(FILE tplFile) {
boolean virtualTemplate = false;
if (tplFile != null) {
int index = HistoryTemplateListCache.getInstance().contains(tplFile);
if (index != -1) {
JTemplate jt = HistoryTemplateListCache.getInstance().getHistoryList().get(index);
if (!(jt instanceof JVirtualTemplate)) {
if (jt instanceof JVirtualTemplate) {
JTemplate currentVirtualReplaceTemplate = HistoryTemplateListCache.getInstance().getCurrentVirtualReplaceTemplate();
if (currentVirtualReplaceTemplate != null && ComparatorUtils.equals(currentVirtualReplaceTemplate.getEditingFILE(), jt.getEditingFILE())) {
currentVirtualReplaceTemplate.activeOldJTemplate();
return;
}
virtualTemplate = true;
} else {
jt.activeOldJTemplate();
return;
}
@ -1116,6 +1124,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null) {
return;
}
// 将JVirtualTemplate创建的真实模板管理起来
if (virtualTemplate) {
HistoryTemplateListCache.getInstance().setCurrentVirtualReplaceTemplate(jt);
}
// 新的form不往前兼容
if (inValidDesigner(jt)) {
this.addAndActivateJTemplate();

Loading…
Cancel
Save