Unexpected NoSuchMethodError AssetData.loadAsset

I’m working on a custom plugin for the SDK. This plugin will open up my text files in a custom GUI. The reason for this is that there’s dependencies between the text file and actually exsisting classes. Having a GUI screen instead of a text editor means I can enforce the correct classnames in the textfile.

I have everything working when I run the plugin project with the run command.
When I load the plugin project into the SDK, it works as well, I can open the template file and it gets opened in the GUI screen. However, I also get an exception. Which I don’t get. It says NoSuchMethodError AssetData.loadAsset. Seeing how that method IS part of the AssetData class, I don’t get the NoSuchMethodError.

java.lang.NoSuchMethodError: com.jme3.gde.core.assets.AssetData.loadAsset()Ljava/lang/Object;
at com.ractoc.fs.templates.editor.EtplOpenSupport.loadEntityTemplateIntoDataObject(EtplOpenSupport.java:31)
at com.ractoc.fs.templates.editor.EtplOpenSupport.open(EtplOpenSupport.java:27)
at org.openide.awt.ActionDefaultPerfomer.actionPerformed(ActionDefaultPerfomer.java:70)
at org.openide.awt.ContextAction$Performer.actionPerformed(ContextAction.java:226)
at org.openide.awt.ContextManager.actionPerformed(ContextManager.java:247)
at org.openide.awt.ContextAction.actionPerformed(ContextAction.java:109)
at org.openide.util.actions.ActionInvoker$1.run(ActionInvoker.java:93)
at org.openide.util.actions.ActionInvoker.doPerformAction(ActionInvoker.java:116)
at org.openide.util.actions.ActionInvoker.invokeAction(ActionInvoker.java:99)
at org.openide.awt.GeneralAction$BaseDelAction.actionPerformed(GeneralAction.java:234)
at org.openide.explorer.view.TreeView$PopupSupport.mouseClicked(TreeView.java:1624)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:269)
at java.awt.Component.processMouseEvent(Component.java:6508)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3312)
at java.awt.Component.processEvent(Component.java:6270)
at java.awt.Container.processEvent(Container.java:2229)
at java.awt.Component.dispatchEventImpl(Component.java:4861)
at java.awt.Container.dispatchEventImpl(Container.java:2287)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4832)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4501)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4422)
at java.awt.Container.dispatchEventImpl(Container.java:2273)
at java.awt.Window.dispatchEventImpl(Window.java:2719)
at java.awt.Component.dispatchEvent(Component.java:4687)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:735)
at java.awt.EventQueue.access$200(EventQueue.java:103)
at java.awt.EventQueue$3.run(EventQueue.java:694)
at java.awt.EventQueue$3.run(EventQueue.java:692)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:87)
at java.awt.EventQueue$4.run(EventQueue.java:708)
at java.awt.EventQueue$4.run(EventQueue.java:706)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:705)
at org.casaburo.utils.textPopupMenu.PopupMenuEventQueue.dispatchEvent(PopupMenuEventQueue.java:114)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:242)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:146)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:138)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:91)

Poking into svn for a few seconds I see that the latest version of AssetData changed the return type of loadAsset() from Object to Savable. So it sounds like you are running an SDK that includes this change but a plugin that was compiled against the previous version.

I’m actually already using the Saveable return type:

[java]@Override
public synchronized Savable loadAsset() {[/java]

and in my OpenCookie I’m not doing anything with the return type:

[java]private void loadEntityTemplateIntoDataObject() {
assetData.loadAsset();
}[/java]

So it shouldn’t be a problem.
But I guess there’s just an incompatibility somewhere in there. Oh well, it works well enough for now.

@ractoc said: I'm actually already using the Saveable return type:

[java]@Override
public synchronized Savable loadAsset() {[/java]

and in my OpenCookie I’m not doing anything with the return type:

[java]private void loadEntityTemplateIntoDataObject() {
assetData.loadAsset();
}[/java]

So it shouldn’t be a problem.
But I guess there’s just an incompatibility somewhere in there. Oh well, it works well enough for now.

It doesn’t matter if you do anything with the return type or not. The compiler picked a method (that returns Object) and that method no longer exists. These things are resolved at compile time, not runtime.

Your code was compiled against an older version of AssetData. I can’t tell you how it happened… but that’s what happened.

So that method that is calling it is doing nothing but throwing an exception. This may cause strange problems for you elsewhere.