Browse Source

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

final/10.0
hades 4 years ago
parent
commit
9018c51a45
  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 List<JTemplate<?, ?>> historyList;
private JTemplate<?, ?> editingTemplate; private JTemplate<?, ?> editingTemplate;
/**
* 当设计器打开的模板数大于模板缓存对象个数时会产生JVirtualTemplate(个数=打开的总模板数 - 缓存模板数)
* 每次点击切换模板时当切换到JVirtualTemplate会创建真实的JTemplate但是该JTemplate创建后不会释放掉需要调用whenClose主动释放
* 该变量对JVirtualTemplate创建真实的JTemplate管理
*/
private JTemplate<?, ?> currentVirtualReplaceTemplate;
public static HistoryTemplateListCache getInstance() { public static HistoryTemplateListCache getInstance() {
return Holder.INSTANCE; return Holder.INSTANCE;
} }
@ -112,6 +120,14 @@ public class HistoryTemplateListCache implements CallbackEvent {
* @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate) * @see DesignerFrameFileDealerPane#setCurrentEditingTemplate(JTemplate)
*/ */
public void setCurrentEditingTemplate(JTemplate<?, ?> jt) { 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; 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) { private void openFile(FILE tplFile) {
boolean virtualTemplate = false;
if (tplFile != null) { if (tplFile != null) {
int index = HistoryTemplateListCache.getInstance().contains(tplFile); int index = HistoryTemplateListCache.getInstance().contains(tplFile);
if (index != -1) { if (index != -1) {
JTemplate jt = HistoryTemplateListCache.getInstance().getHistoryList().get(index); 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(); jt.activeOldJTemplate();
return; return;
} }
@ -1116,6 +1124,12 @@ public class DesignerFrame extends JFrame implements JTemplateActionListener, Ta
if (jt == null) { if (jt == null) {
return; return;
} }
// 将JVirtualTemplate创建的真实模板管理起来
if (virtualTemplate) {
HistoryTemplateListCache.getInstance().setCurrentVirtualReplaceTemplate(jt);
}
// 新的form不往前兼容 // 新的form不往前兼容
if (inValidDesigner(jt)) { if (inValidDesigner(jt)) {
this.addAndActivateJTemplate(); this.addAndActivateJTemplate();

Loading…
Cancel
Save