#java #illegalargumentexception
#Ява #незаконное исключение аргумента
Вопрос:
Я получаю IllegalArgumentException
сообщение, когда пытаюсь загрузить класс, описывающий JMenuItem
свойства a из списка. Чтобы помочь, я включаю соответствующие части своего API и код, который вызывает это исключение.
API выглядит следующим образом:
public interface MenuCommand extends Comparablelt;MenuCommandgt; { 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 Listlt;MenuCommandgt; getMenuItems(); // Retrieves all of the items I am having the issue with. public Listlt;MenuProvidergt; getMenus(); // Works as expected in the application. public Listlt;ToolbarCommandgt; getToolbarButtons(); // May experience this same issue again loading these... public String getPluginName(); public String getVendorName(); public String getCopyright(); public default Listlt;Stringgt; getContributors() { return Collections.emptyList(); } }
initialize()
Метод моего приложения вызывает вызываемый частный метод loadModules
, который загружает все последние реализации интерфейса в ArrayListlt;Plugingt;
переменную. Как только модули плагина загружены, я вызываю метод с именем buildMainMenu
, который извлекает все MenuProvider
s из каждого плагина и загружает их в меню главного окна, и этот метод отлично работает.
Как только в главном меню будут загружены все меню верхнего уровня и подменю из различных установленных плагинов, initialize
затем вызовет addMenuItems
загрузку реализаций интерфейса former ( MenuCommand
) в соответствующие меню, и именно там будет создано это исключение. Вот код, который не работает:
private void addMenuItems() { Listlt;MenuCommandgt; allCommands = new ArrayListlt;gt;(); 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 lt; 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; }
If the individual MenuCommand
implementations that are stored in the Plugin
‘s getMenuItems
list have already been initialized (loaded), they should have a ClassLoader
associated with them. When I break execution on the problem line, the c
class has a ClassLoader
, but I do see a couple of null
property values:
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
Furthermore, from the static
section of the ClassLoader
, the usr_paths
array has a length of 5, containing various JDK-related paths. The sys_paths
array has a length of 1, pointing to the /usr/lib/jvm/jdk-11.0.12/lib
folder, as it should. The packageToModule
array has a size of 1079. The ClassLoader$AppClassLoader
properties are identical to those listed above.
Attempts to solve
In an attempt to solve this issue, I have tried not using the Listlt;Plugingt; modules.getMenuItems()
method, but to use the ServiceLoaderlt;MenuCommandgt;.load
method to see if that would do it, but it did not.
I have read through numerous ServiceLoader
, ClassLoader
, and other documentation, including the book about the Java Virtual Machine that I have, but have not been able to discover what I am missing.
I have looked at other questions about similar issues, but they have not helped either. I am hoping that posting this question will find me some help. Thank you all for your assistance.
-SC
UPDATE getResourceMap()
and getActionMap()
are part of a slightly updated version of the JSR-296 org.jdesktop
AppFramework. Here is the full stacktrace:
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.lt;initgt;(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.lt;initgt;(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] gt;gt;gt; Exception stacktrace located here lt;lt;lt; [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() gt; 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]
Комментарии:
1. Что такое
getContext()
иgetActionMap(someClass)
? Стандартные качели просто естьgetActionMap()
. Возможно, вы используете jdesktop? Также отсутствует полная трассировка стека и сообщение об этом исключении. Вы вставили много, но не самые важные части.2. ОБНОВЛЕНИЕ : Я попытался создать интерфейс маркера
ActionsClass
, который просто отмечал бы любой класс , содержащий метод, украшенный@Action
аннотацией, затем обновил свойPlugin
интерфейс, чтобы иметь методpublic default Classlt;ActionsClassgt; getActionsClass() { return Actions.class; }
, но все равно получил то жеIllegalArgumentException
самое для anull ClassLoader
. Итак, я все еще зациклен на этом…3. @rzwitserloot, мои извинения… Да, я использую jdesktop AppFramework (немного обновлено), и сейчас я публикую трассировку стека.
Ответ №1:
Просматривая org.jdesktop.application.ApplicationAction
класс, я обнаружил свою (крайне новичковую) ошибку в addMenuItem
методе. Строка кода, которая взорвалась вместе с IllegalArgumentException
was:
ApplicationActionmap actMap = getContext().getActionMap(c.getClass());
Я обнаружил ошибку в этой строке, просматривая ApplicationAction
исходный код класса, чтобы убедиться, что я ничего не сломал в нем, когда обновлял его. Я обнаружил это — вы передаете не класс getActionMap
, а экземпляр класса:
actMap = getContext().getActionMap(c.getClass()); // WRONG! actMap = getContext().getActionMap(c)) // Correct!!!
Поэтому я просто передавал неправильный параметр, чтобы получить свои действия из своего MenuCommand
экземпляра.
[РЕШЕНО] Передайте экземпляр класса , содержащего действие getActionMap
, не самому классу.