Skip to main content



      Home
Home » Eclipse Projects » GEF » [SOLVED] AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui
[SOLVED] AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782869] Fri, 02 March 2018 12:19 Go to next message
Eclipse UserFriend
Hi,

I'm currently trying to build a GEF 5.0.2 editor on a compatibility RCP app based on Neon.

For this I'm trying to use an extension of AbstractFXEditor bound to a file extension via plugin.xml (just like in the old days).

I've set -Dosgi.framework.extensions=org.eclipse.fx.osgi (which got rid of the initial FXCanvas error), but when trying to open a file, I get a ClassNotFoundException on javafx.beans.value.ChangeListener from o.e.g.mvc.fx.ui.

Any ideas?

This is giving me a headache, and I'm happy to provide any further info that may be needed. Thanks!

!ENTRY org.eclipse.ui 4 4 2018-03-02 17:39:39.980
!MESSAGE Unable to create part
!SUBENTRY 1 org.eclipse.ui 4 1 2018-03-02 17:39:39.981
!MESSAGE Plug-in "net.my.tool.grapheditor" was unable to instantiate class "net.my.tool.grapheditor.GraphEditor".
!STACK 1
org.eclipse.core.runtime.CoreException: Plug-in "net.my.tool.grapheditor" was unable to instantiate class "net.my.tool.grapheditor.GraphEditor".
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.throwException(RegistryStrategyOSGI.java:194)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:188)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
	at org.eclipse.ui.internal.WorkbenchPlugin$1.run(WorkbenchPlugin.java:291)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:286)
	at org.eclipse.ui.internal.registry.EditorDescriptor.createEditor(EditorDescriptor.java:235)
	at org.eclipse.ui.internal.EditorReference.createPart(EditorReference.java:329)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:278)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityEditor.createPart(CompatibilityEditor.java:63)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:316)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:966)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:931)
	at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:151)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:375)
	at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:294)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:975)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:651)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:757)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:728)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:722)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:706)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$1.handleEvent(PartServiceImpl.java:104)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler$1.run(UIEventHandler.java:40)
	at org.eclipse.swt.widgets.Synchronizer.syncExec(Synchronizer.java:233)
	at org.eclipse.ui.internal.UISynchronizer.syncExec(UISynchronizer.java:145)
	at org.eclipse.swt.widgets.Display.syncExec(Display.java:5414)
	at org.eclipse.e4.ui.internal.workbench.swt.E4Application$1.syncExec(E4Application.java:211)
	at org.eclipse.e4.ui.services.internal.events.UIEventHandler.handleEvent(UIEventHandler.java:36)
	at org.eclipse.equinox.internal.event.EventHandlerWrapper.handleEvent(EventHandlerWrapper.java:201)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:197)
	at org.eclipse.equinox.internal.event.EventHandlerTracker.dispatchEvent(EventHandlerTracker.java:1)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
	at org.eclipse.equinox.internal.event.EventAdminImpl.dispatchEvent(EventAdminImpl.java:135)
	at org.eclipse.equinox.internal.event.EventAdminImpl.sendEvent(EventAdminImpl.java:78)
	at org.eclipse.equinox.internal.event.EventComponent.sendEvent(EventComponent.java:39)
	at org.eclipse.e4.ui.services.internal.events.EventBroker.send(EventBroker.java:94)
	at org.eclipse.e4.ui.internal.workbench.UIEventPublisher.notifyChanged(UIEventPublisher.java:60)
	at org.eclipse.emf.common.notify.impl.BasicNotifierImpl.eNotify(BasicNotifierImpl.java:374)
	at org.eclipse.e4.ui.model.application.ui.impl.ElementContainerImpl.setSelectedElement(ElementContainerImpl.java:173)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.showElementInWindow(ModelServiceImpl.java:617)
	at org.eclipse.e4.ui.internal.workbench.ModelServiceImpl.bringToTop(ModelServiceImpl.java:581)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.delegateBringToTop(PartServiceImpl.java:770)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.bringToTop(PartServiceImpl.java:401)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1214)
	at org.eclipse.ui.internal.WorkbenchPage.busyOpenEditor(WorkbenchPage.java:3261)
	at org.eclipse.ui.internal.WorkbenchPage.access$25(WorkbenchPage.java:3176)
	at org.eclipse.ui.internal.WorkbenchPage$10.run(WorkbenchPage.java:3158)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3153)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3117)
	at org.eclipse.ui.internal.WorkbenchPage.openEditor(WorkbenchPage.java:3107)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:563)
	at org.eclipse.ui.ide.IDE.openEditor(IDE.java:518)
	at org.eclipse.ui.actions.OpenFileAction.openFile(OpenFileAction.java:100)
	at org.eclipse.ui.actions.OpenSystemEditorAction.run(OpenSystemEditorAction.java:97)
	at org.eclipse.ui.actions.RetargetAction.run(RetargetAction.java:225)
	at org.eclipse.ui.navigator.CommonNavigatorManager$2.open(CommonNavigatorManager.java:191)
	at org.eclipse.ui.OpenAndLinkWithEditorHelper$InternalListener.open(OpenAndLinkWithEditorHelper.java:46)
	at org.eclipse.jface.viewers.StructuredViewer$2.run(StructuredViewer.java:855)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:50)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
	at org.eclipse.jface.viewers.StructuredViewer.fireOpen(StructuredViewer.java:852)
	at org.eclipse.jface.viewers.StructuredViewer.handleOpen(StructuredViewer.java:1169)
	at org.eclipse.ui.navigator.CommonViewer.handleOpen(CommonViewer.java:451)
	at org.eclipse.jface.util.OpenStrategy.fireOpenEvent(OpenStrategy.java:278)
	at org.eclipse.jface.util.OpenStrategy.access$2(OpenStrategy.java:272)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:313)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5227)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1340)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4561)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4151)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$4.run(PartRenderingEngine.java:1121)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1022)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:150)
	at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:693)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:610)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at net.my.tool.Atomic.start(Atomic.java:65)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:673)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:610)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1519)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1492)
Caused by: java.lang.NoClassDefFoundError: javafx/beans/value/ChangeListener
	at java.lang.Class.getDeclaredConstructors0(Native Method)
	at java.lang.Class.privateGetDeclaredConstructors(Class.java:2671)
	at java.lang.Class.getConstructor0(Class.java:3075)
	at java.lang.Class.newInstance(Class.java:412)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
	... 108 more
Caused by: java.lang.ClassNotFoundException: javafx.beans.value.ChangeListener cannot be found by org.eclipse.gef.mvc.fx.ui_5.0.2.201711130301
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:461)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:372)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:364)
	at org.eclipse.osgi.internal.loader.ModuleClassLoader.loadClass(ModuleClassLoader.java:161)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
	... 113 more

[Updated on: Thu, 08 March 2018 05:27] by Moderator

Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782884 is a reply to message #1782869] Sat, 03 March 2018 03:11 Go to previous messageGo to next message
Eclipse UserFriend
I got the same exception when I do not set the "-Dosgi.framework.extensions=org.eclipse.fx.osgi" at all.

However, setting it properly in the Run Configuration, Arguments Tab, VM arguments, it works fine and I can open the editor. Could you please tell me where exactly do you set this parameter?
Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782885 is a reply to message #1782884] Sat, 03 March 2018 03:54 Go to previous messageGo to next message
Eclipse UserFriend
Thanks. At the moment I only set it in the product's VM args. I don't run it from within Eclipse, but get the exception in the built product.
Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782889 is a reply to message #1782885] Sat, 03 March 2018 11:32 Go to previous messageGo to next message
Eclipse UserFriend
Could you perhaps share a (minimal) example plugin project? That'd help me tons :). I'll also minimize my setup and share here. Can't do that before Monday unfortunately.

[Updated on: Sat, 03 March 2018 11:35] by Moderator

Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782899 is a reply to message #1782869] Sun, 04 March 2018 05:29 Go to previous messageGo to next message
Eclipse UserFriend
In case you are using an extension point to load the class, you probably run into class loading problems that might require setting an explicit buddy-policy: https://wiki.eclipse.org/Context_Class_Loader_Enhancements#Eclipse-RegisterBuddy
Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1782934 is a reply to message #1782899] Mon, 05 March 2018 07:48 Go to previous messageGo to next message
Eclipse UserFriend
I see, thanks Alexander.

I'd rather not break proper encapsulation via the introduction of buddy classloaders, and I've managed to set things up properly via fragment.e4xmi now, hence avoiding the classloading problem.

[Updated on: Thu, 08 March 2018 05:27] by Moderator

Re: AbstractFXEditor throws ClassNotFoundException via o.e.g.mvc.fx.ui [message #1783594 is a reply to message #1782934] Wed, 14 March 2018 09:01 Go to previous message
Eclipse UserFriend
So in the end I decided to roll back to using AbstractFXEditor for convenience, and I managed to get that setup to work as well, without having to resort to the dreaded BuddyPolicy.

Based on Dirk Fauth's cookbook recipe (thanks Dirk, not only did you give us NatTable, but also saved my day with this recipe), I did the following:


  1. Add the e(fx)clipse E4 Target feature to the target definition (org.eclipse.fx.target.rcp4.feature.feature.group, from http://download.eclipse.org/efxclipse/runtime-released/2.6.0/site/)
  2. Add the feature to the product definition
  3. Add the VM argument -Dosgi.framework.extensions=org.eclipse.fx.osgi to the product definition


Note that I didn't have to import any javafx* packages (in fact, when I did, I got the "deprecated binding" warning WARNING: You are binding against the deprecated org.eclipse.fx.javafx - please remove all javafx imports).

Works like a spell!

UPDATE: Well, works like a spell after I've changed -Dosgi.framework.extensions=org.eclipse.fx.osgi to -Dorg.osgi.framework.bundle.parent=ext. Funnily enough, the former works fine on Linux OpenJDK, the latter is needed for Windows 10 and Oracle JDK.

[Updated on: Wed, 14 March 2018 15:52] by Moderator

Previous Topic:FreeformLayer repaint problem
Next Topic:[GEF 3] Connection Mouse Cursor Linux
Goto Forum:
  


Current Time: Fri Apr 18 13:18:03 EDT 2025

Powered by FUDForum. Page generated in 0.03711 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top