Browse Source

Merge pull request #1491 in BA/design from ~JU/9.0release-design:release/9.0 to release/9.0

* commit 'f26cf271f0428d39270949866290e4a5bfcec7a2':
  REPORT-5894 设计器打开大量带背景的模板后, 关闭, GC后内存没有放掉
  REPORT-5894 设计器打开大量带背景的模板后, 关闭, GC后内存没有放掉
superman 8 years ago
parent
commit
ffe8fb700f
  1. 35
      designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java

35
designer_base/src/com/fr/design/mainframe/toolbar/ToolBarMenuDock.java

@ -58,7 +58,6 @@ import com.fr.plugin.observer.PluginEvent;
import com.fr.plugin.observer.PluginEventListener;
import com.fr.plugin.observer.PluginEventType;
import com.fr.stable.ArrayUtils;
import com.fr.stable.ProductConstants;
import com.fr.stable.StringUtils;
import javax.swing.*;
@ -132,6 +131,9 @@ public abstract class ToolBarMenuDock {
};
private static final String FINEREPORT = "FineReport";
private static final int MENUBAR_HEIGHT = 22;
private static final List<PluginEventListener> PLUGIN_LISTENERS = new ArrayList<>();
private MenuDef[] menus;
private ToolBarDef toolBarDef;
private List<UpdateActionModel> shortCutsList;
@ -177,7 +179,6 @@ public abstract class ToolBarMenuDock {
return dim;
}
};
this.menus = menus(plus);
for (int i = 0; i < menus.length; i++) {
UIMenu subMenu = menus[i].createJMenu();
@ -201,6 +202,8 @@ public abstract class ToolBarMenuDock {
}
public MenuDef[] menus(final ToolBarMenuDockPlus plus) {
//删除之前创建的插件菜单监听
clearPluginListeners();
java.util.List<MenuDef> menuList = new java.util.ArrayList<MenuDef>();
// 添加文件菜单
menuList.add(createFileMenuDef(plus));
@ -231,6 +234,14 @@ public abstract class ToolBarMenuDock {
return menuList.toArray(new MenuDef[menuList.size()]);
}
private static synchronized void clearPluginListeners() {
for (PluginEventListener listener : PLUGIN_LISTENERS) {
GeneralContext.stopListenPlugin(listener);
}
PLUGIN_LISTENERS.clear();
}
/**
* 获取所有actionmodel
*
@ -603,7 +614,7 @@ public abstract class ToolBarMenuDock {
}
private void listenPluginMenuChange(final MenuDef menuDef, final String anchor, final ShortCutMethodAction action) {
private static synchronized void listenPluginMenuChange(final MenuDef menuDef, final String anchor, final ShortCutMethodAction action) {
PluginFilter filter = new PluginFilter() {
@ -614,7 +625,7 @@ public abstract class ToolBarMenuDock {
}
};
GeneralContext.listenPlugin(PluginEventType.BeforeStop, new PluginEventListener() {
PluginEventListener beforeStop = new PluginEventListener() {
@Override
public void on(PluginEvent event) {
@ -622,8 +633,9 @@ public abstract class ToolBarMenuDock {
Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING);
removeExtraMenus(menuDef, anchor, action, menuHandlers);
}
}, filter);
GeneralContext.listenPlugin(PluginEventType.AfterRun, new PluginEventListener() {
};
PluginEventListener afterRun = new PluginEventListener() {
@Override
public void on(PluginEvent event) {
@ -632,10 +644,15 @@ public abstract class ToolBarMenuDock {
Set<MenuHandler> menuHandlers = runtime.get(MenuHandler.MARK_STRING);
addExtraMenus(menuDef, anchor, action, menuHandlers);
}
}, filter);
};
GeneralContext.listenPlugin(PluginEventType.BeforeStop, beforeStop, filter);
GeneralContext.listenPlugin(PluginEventType.AfterRun, afterRun, filter);
PLUGIN_LISTENERS.add(afterRun);
PLUGIN_LISTENERS.add(beforeStop);
}
private void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) {
private static void removeExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) {
List<MenuHandler> target = new ArrayList<>();
@ -658,7 +675,7 @@ public abstract class ToolBarMenuDock {
}
}
private void addExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) {
private static void addExtraMenus(MenuDef menuDef, String anchor, ShortCutMethodAction action, Set<MenuHandler> set) {
List<MenuHandler> target = new ArrayList<>();
for (MenuHandler handler : set) {

Loading…
Cancel
Save