当我试图从列表中加载一个描述IllegalArgumentException属性的类时,我得到了一个JMenuItem。为了帮助解决这个问题,我包括了API的相关部分和导致这个异常的代码。
空气污染指数如下:
public interface MenuCommand extends Comparable<MenuCommand> {
public String getName();
public String getOwner();
public int getPosition();
public String getActionName();
public default boolean separatorBefore() { return false; }
public default boolean separatorAfter() { return false; }
}这个接口定义了将在我的应用程序的javax.swing.JMenuItem方法中创建的initialize。但是,由于我使应用程序完全可插拔,我实际上使用以下接口实例化各个模块中的各种MenuCommand类:
public interface Plugin {
public String getVersion();
public OptionsPanelProvider getOptionsPanel(); // A custom JPanel implementation.
public List<MenuCommand> getMenuItems(); // Retrieves all of the items I am having the issue with.
public List<MenuProvider> getMenus(); // Works as expected in the application.
public List<ToolbarCommand> getToolbarButtons(); // May experience this same issue again loading these...
public String getPluginName();
public String getVendorName();
public String getCopyright();
public default List<String> getContributors() { return Collections.emptyList(); }
}我的应用程序的initialize()方法调用一个名为loadModules的私有方法,该方法将后一个接口实现加载到一个ArrayList<Plugin>变量中。一旦加载了插件模块,我就调用一个名为buildMainMenu的方法,它从每个插件中提取出所有的MenuProvider,并将它们加载到主窗口的菜单中,这个方法工作得很好。
一旦主菜单从各种已安装的插件中加载了所有顶级菜单和子菜单,initialize就会调用addMenuItems将前者(MenuCommand)接口实现加载到相应的菜单中,这就是抛出异常的地方。下面是不起作用的代码:
private void addMenuItems() {
List<MenuCommand> allCommands = new ArrayList<>();
for (Plugin p : modules) {
allCommands.addAll(p.getMenuItems());
}
Collections.sort(allCommands); // Hence the extension of Comparable on the interface.
javax.swing.JMenuBar bar = mainWindow.getMenuBar();
for (int x = 0; x < bar.getMenuCount(); x++) {
javax.swing.JMenu m = bar.getMenu(x);
for (MenuCommand c : allCommands) {
if (m.getName().equals(c.getOwner())) {
m.add(createJMenuItem(c));
}
}
}
}
private javax.swing.JMenuItem createJMenuItem(MenuCommand c) {
ResourceMap resMap = getContext().getResourceMap(c.getClass());
//vvv This is the line throwing the exception vvv\\
ActionMap actMap = getContext().getActionMap(c.getClass());
javax.swing.JMenuItem item = new javax.swing.JMenuItem();
item.setName(c.getName());
item.setAction(actMap.getAction(c.getActionName()));
getContext().getSessionStorage().injectComponent(item);
return item;
}如果存储在Plugin的getMenuItems列表中的各个getMenuItems实现已经初始化(加载),那么它们应该有一个与之关联的ClassLoader。当我在问题线上中断执行时,c类有一个ClassLoader,但我确实看到了一些null属性值:
c.getClass().getClassLoader().URLClassPath = #1975
c.getClass().getClassLoader().URLClassPath.path = ArrayList.size = 0
c.getClass().getClassLoader().URLClassPath.unopenedUrls = ArrayDeque.size = 0
c.getClass().getClassLoader().URLClassPath.loaders = ArrayList.size = 0
c.getClass().getClassLoader().URLClassPath.Imap = HashMap.size = 0
c.getClass().getClassLoader().URLClassPath.jarHandler = null
c.getClass().getClassLoader().URLClassPath.closed = false
c.getClass().getClassLoader().URLClassPath.acc = null此外,从static部分的ClassLoader中,usr_paths数组的长度为5,包含各种与JDK相关的路径。sys_paths数组的长度为1,指向/usr/lib/jvm/jdk-11.0.12/lib文件夹。packageToModule数组的大小为1079。ClassLoader$AppClassLoader属性与上面列出的属性相同。
试图解决
为了解决这个问题,我尝试不使用List<Plugin> modules.getMenuItems()方法,而是使用ServiceLoader<MenuCommand>.load方法来查看是否会这样做,但它没有。
我已经阅读了许多ServiceLoader、ClassLoader和其他文档,包括我所拥有的关于Java的书,但是没有发现我所缺少的东西。
我曾研究过有关类似问题的其他问题,但这些问题也没有帮助。我希望张贴这个问题会给我一些帮助。谢谢你们的帮助。
-SC
UPDATE getResourceMap()和getActionMap()是JSR-296 org.jdesktop AppFramework稍微更新版本的一部分。下面是完整的堆栈跟踪:
Dec 01, 2021 8:33:28 AM org.jdesktop.application.Application$1 run
SEVERE: Application class com.gs.nta.NTApp failed to launch
java.lang.IllegalArgumentException: null ClassLoader
at appframework@1.0.3/org.jdesktop.application.ResourceMap.<init>(ResourceMap.java:152)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.createResourceMap(ResourceManager.java:436)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.createResourceMapChain(ResourceManager.java:139)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.getClassResourceMap(ResourceManager.java:173)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.getResourceMap(ResourceManager.java:254)
at appframework@1.0.3/org.jdesktop.application.ApplicationContext.getResourceMap(ApplicationContext.java:203)
at appframework@1.0.3/org.jdesktop.application.ActionManager.getActionMap(ActionManager.java:168)
at appframework@1.0.3/org.jdesktop.application.ApplicationContext.getActionMap(ApplicationContext.java:303)
at NTA.Foundation/com.gs.nta.NTApp.createJMenuItem(NTApp.java:709)
at NTA.Foundation/com.gs.nta.NTApp.addMenuItems(NTApp.java:636)
at NTA.Foundation/com.gs.nta.NTApp.initialize(NTApp.java:171)
at appframework@1.0.3/org.jdesktop.application.Application$1.run(Application.java:170)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Exception in thread "AWT-EventQueue-0" java.lang.Error: Application class com.gs.nta.NTApp failed to launch
at appframework@1.0.3/org.jdesktop.application.Application$1.run(Application.java:177)
at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
at java.base/java.security.AccessController.doPrivileged(Native Method)
at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)
Caused by: java.lang.IllegalArgumentException: null ClassLoader
at appframework@1.0.3/org.jdesktop.application.ResourceMap.<init>(ResourceMap.java:152)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.createResourceMap(ResourceManager.java:436)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.createResourceMapChain(ResourceManager.java:139)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.getClassResourceMap(ResourceManager.java:173)
at appframework@1.0.3/org.jdesktop.application.ResourceManager.getResourceMap(ResourceManager.java:254)
at appframework@1.0.3/org.jdesktop.application.ApplicationContext.getResourceMap(ApplicationContext.java:203)
at appframework@1.0.3/org.jdesktop.application.ActionManager.getActionMap(ActionManager.java:168)
at appframework@1.0.3/org.jdesktop.application.ApplicationContext.getActionMap(ApplicationContext.java:303)
at NTA.Foundation/com.gs.nta.NTApp.createJMenuItem(NTApp.java:709)
at NTA.Foundation/com.gs.nta.NTApp.addMenuItems(NTApp.java:636)
at NTA.Foundation/com.gs.nta.NTApp.initialize(NTApp.java:171)
at appframework@1.0.3/org.jdesktop.application.Application$1.run(Application.java:170)
... 13 more更新2,只是为了获得更多的应用程序流信息,下面是我的记录器的输出:
[ENTER] (2021-12-01T14:33:27.942336Z): [SEQ 1]: com.gs.nta.NTApp.initialize - Initializing application and all objects. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [--ide]
[ENTER] (2021-12-01T14:33:27.964177Z): [SEQ 3]: com.gs.nta.NTApp.parseArguments - Parsing command-line arguments. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [--ide]
TRACE (2021-12-01T14:33:27.966121Z): [SEQ 6]: com.gs.nta.NTApp.parseArguments - development.mode=true; logger.level=TRACE | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [--ide]
CONFIG (2021-12-01T14:33:27.969736Z): [SEQ 7]: com.gs.nta.NTApp.parseArguments - Checking to see if the formatted logs argument is present. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [--ide]
TRACE (2021-12-01T14:33:27.969981Z): [SEQ 8]: com.gs.nta.NTApp.parseArguments - logging.format=false | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [--ide]
[EXIT] (2021-12-01T14:33:27.970190Z): [SEQ 9]: com.gs.nta.NTApp.parseArguments - Done parsing command-line arguments. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[ENTER] (2021-12-01T14:33:27.970608Z): [SEQ 10]: com.gs.nta.NTApp.loadModules - Loading modules: | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
CONFIG (2021-12-01T14:33:27.980256Z): [SEQ 11]: com.gs.nta.NTApp.loadModules - Plugin Loaded: NTA Properties Manager (GS United Labs) v. NTA_Properties_Manager-1.0-DEV-SNAPSHOT | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
CONFIG (2021-12-01T14:33:27.993990Z): [SEQ 12]: com.gs.nta.NTApp.loadModules - Plugin Loaded: Logging System (GS United Labs) v. Logging_System-5.0-SNAPSHOT | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
CONFIG (2021-12-01T14:33:27.994537Z): [SEQ 13]: com.gs.nta.NTApp.loadModules - Plugin Loaded: Northwind Traders Foundation (GS United Labs) v. Northwind_Traders_Foundation-1.0-DEV-SNAPSHOT | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[EXIT] (2021-12-01T14:33:27.994737Z): [SEQ 14]: com.gs.nta.NTApp.loadModules - Done loading modules. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[ENTER] (2021-12-01T14:33:28.045044Z): [SEQ 15]: com.gs.nta.NTApp.buildMainMenu - Building menu system... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
DEBUG (2021-12-01T14:33:28.045355Z): [SEQ 16]: com.gs.nta.NTApp.buildMainMenu - Getting all menus from all installed modules. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
TRACE (2021-12-01T14:33:28.047357Z): [SEQ 17]: com.gs.nta.NTApp.buildMainMenu - Retrieved 6 menus from installed modules. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
DEBUG (2021-12-01T14:33:28.047727Z): [SEQ 18]: com.gs.nta.NTApp.buildMainMenu - Getting only top-level menus from the list of all menus. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
TRACE (2021-12-01T14:33:28.047883Z): [SEQ 19]: com.gs.nta.NTApp.buildMainMenu - Of all 6 menus, 5 were top-level menus. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
TRACE (2021-12-01T14:33:28.048127Z): [SEQ 20]: com.gs.nta.NTApp.buildMainMenu - Of all 6 menus, 5 were menu items. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[ENTER] (2021-12-01T14:33:28.065047Z): [SEQ 21]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.FileMenuProvider@7e9d8d7b | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.FileMenuProvider@7e9d8d7b]
>>> Exception stacktrace located here <<<
[EXIT] (2021-12-01T14:33:28.075770Z): [SEQ 22]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[fileMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=File] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.FileMenuProvider@7e9d8d7b]
[ENTER] (2021-12-01T14:33:28.226546Z): [SEQ 23]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.EditMenuProvider@6b3f648a | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.EditMenuProvider@6b3f648a]
[EXIT] (2021-12-01T14:33:28.228859Z): [SEQ 24]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[editMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Edit] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.EditMenuProvider@6b3f648a]
[ENTER] (2021-12-01T14:33:28.229384Z): [SEQ 25]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.ViewMenuProvider@26a1a787 | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.ViewMenuProvider@26a1a787]
[EXIT] (2021-12-01T14:33:28.231477Z): [SEQ 26]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[viewMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=View] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.ViewMenuProvider@26a1a787]
[ENTER] (2021-12-01T14:33:28.232001Z): [SEQ 27]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.ToolsMenuProvider@2b41cd51 | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.ToolsMenuProvider@2b41cd51]
[EXIT] (2021-12-01T14:33:28.234856Z): [SEQ 28]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[toolsMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Tools] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.ToolsMenuProvider@2b41cd51]
[ENTER] (2021-12-01T14:33:28.235381Z): [SEQ 29]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.HelpMenuProvider@2ee9de63 | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.HelpMenuProvider@2ee9de63]
[EXIT] (2021-12-01T14:33:28.237675Z): [SEQ 30]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[helpMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Help] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.HelpMenuProvider@2ee9de63]
TRACE (2021-12-01T14:33:28.238275Z): [SEQ 31]: com.gs.nta.NTApp.createJMenu - Built the java.awt.MenuBar (javax.swing.JMenuBar[menuBar,0,0,0x0,invalid,layout=javax.swing.plaf.basic.DefaultMenuLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuBarBorder@3ee2e400,flags=392,maximumSize=,minimumSize=,preferredSize=,margin=,paintBorder=true]) and setting it as the menuBar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.HelpMenuProvider@2ee9de63]
TRACE (2021-12-01T14:33:28.239715Z): [SEQ 32]: com.gs.nta.NTApp.createJMenu - mainWindow.getJMenuBar() == javax.swing.JMenuBar[menuBar,0,0,0x0,invalid,layout=javax.swing.plaf.basic.DefaultMenuLayout,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuBarBorder@3ee2e400,flags=392,maximumSize=,minimumSize=,preferredSize=,margin=,paintBorder=true] | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.HelpMenuProvider@2ee9de63]
[ENTER] (2021-12-01T14:33:28.240156Z): [SEQ 33]: com.gs.nta.NTApp.buildSubMenus - Building sub-menus... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.240356Z): [SEQ 34]: com.gs.nta.NTApp.buildSubMenus - Checking menus.getSize() > 1: false | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.240641Z): [SEQ 35]: com.gs.nta.NTApp.buildSubMenus - Got menu, javax.swing.JMenu[fileMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=File], from the menubar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
[ENTER] (2021-12-01T14:33:28.241015Z): [SEQ 36]: com.gs.nta.NTApp.createJMenu - Creating a java.awt.Menu from the MenuProvider: com.gs.nta.menus.NewMenuProvider@15d4f1c4 | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
[EXIT] (2021-12-01T14:33:28.243433Z): [SEQ 37]: com.gs.nta.NTApp.createJMenu - Menu javax.swing.JMenu[fileNewMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=New] created and returned. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
[EXIT] (2021-12-01T14:33:28.248355Z): [SEQ 38]: com.gs.nta.NTApp.buildSubMenus - Added the menu created from MenuProvider (com.gs.nta.menus.NewMenuProvider@15d4f1c4) to the menubar. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.248355Z): [SEQ 39]: com.gs.nta.NTApp.buildSubMenus - Added the menu created from MenuProvider (com.gs.nta.menus.NewMenuProvider@15d4f1c4) to the menubar. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.248838Z): [SEQ 40]: com.gs.nta.NTApp.buildSubMenus - Got menu, javax.swing.JMenu[editMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Edit], from the menubar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.249261Z): [SEQ 41]: com.gs.nta.NTApp.buildSubMenus - (p.getOwnerName()=fileMenu) != (m.getName()=editMenu): moving on... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.249519Z): [SEQ 42]: com.gs.nta.NTApp.buildSubMenus - Got menu, javax.swing.JMenu[viewMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=View], from the menubar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.251184Z): [SEQ 43]: com.gs.nta.NTApp.buildSubMenus - (p.getOwnerName()=fileMenu) != (m.getName()=viewMenu): moving on... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.251751Z): [SEQ 44]: com.gs.nta.NTApp.buildSubMenus - Got menu, javax.swing.JMenu[toolsMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Tools], from the menubar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.253902Z): [SEQ 45]: com.gs.nta.NTApp.buildSubMenus - (p.getOwnerName()=fileMenu) != (m.getName()=toolsMenu): moving on... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.254924Z): [SEQ 46]: com.gs.nta.NTApp.buildSubMenus - Got menu, javax.swing.JMenu[helpMenu,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.metal.MetalBorders$MenuItemBorder@74ee4a2b,flags=256,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=2,bottom=2,right=2],paintBorder=true,paintFocus=false,pressedIcon=,rolloverEnabled=false,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text=Help], from the menubar on the mainFrame. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
TRACE (2021-12-01T14:33:28.255386Z): [SEQ 47]: com.gs.nta.NTApp.buildSubMenus - (p.getOwnerName()=fileMenu) != (m.getName()=helpMenu): moving on... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
[EXIT] (2021-12-01T14:33:28.255617Z): [SEQ 48]: com.gs.nta.NTApp.buildSubMenus - Sub-menus have all been added to the menu system. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.NewMenuProvider@15d4f1c4]
[EXIT] (2021-12-01T14:33:28.255792Z): [SEQ 49]: com.gs.nta.NTApp.buildMainMenu - Menu system built. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[ENTER] (2021-12-01T14:33:28.255941Z): [SEQ 50]: com.gs.nta.NTApp.addMenuItems - Adding menu items to the menus... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
CONFIG (2021-12-01T14:33:28.256095Z): [SEQ 51]: com.gs.nta.NTApp.addMenuItems - Getting all registered menu commands... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
TRACE (2021-12-01T14:33:28.264841Z): [SEQ 52]: com.gs.nta.NTApp.addMenuItems - Retrieved a total of 3 menu commands. | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
CONFIG (2021-12-01T14:33:28.265224Z): [SEQ 53]: com.gs.nta.NTApp.addMenuItems - Sorted the menu commands. Now loading them into the application menus... | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]
[ENTER] (2021-12-01T14:33:28.265478Z): [SEQ 54]: com.gs.nta.NTApp.createJMenuItem - Creating a javax.swing.JMenuItem from the MenuProvider: com.gs.nta.menus.ExitCommand@514e805f | (Thread AWT-EventQueue-0 [ID=16; PRIORITY=6; STATE=RUNNABLE]: Parameter(s): [com.gs.nta.menus.ExitCommand@514e805f]发布于 2021-12-01 15:29:00
在查看org.jdesktop.application.ApplicationAction类时,我在addMenuItem方法中发现了我(非常新手)的错误。与IllegalArgumentException一起爆炸的代码行是:
ApplicationActionmap actMap = getContext().getActionMap(c.getClass());我在查看ApplicationAction类的源代码时发现了该行中的错误,以确保在更新它时没有破坏它中的某些内容。我发现--不是将类传递给getActionMap,而是传递类的实例:
actMap = getContext().getActionMap(c.getClass()); // WRONG!
actMap = getContext().getActionMap(c)) // Correct!!!因此,我只是传递了错误的参数,以便从我的MenuCommand实例中获得我的操作。
解决了将包含操作的类的实例传递给getActionMap,而不是类本身。
https://stackoverflow.com/questions/70185835
复制相似问题