Skip to content

java.lang.ClassCastException: class org.eclipse.swt.widgets.SwtComposite cannot be cast to class org.eclipse.swt.widgets.DartControl (org.eclipse.swt.widgets.SwtComposite and org.eclipse.swt.widgets.DartControl are in unnamed module #42

@fipro78

Description

@fipro78

I wanted to test Evolve with NatTable again, since you promoted that it works now.

I downloaded the current Evolve release 0.278 and placed it in the NatTable E4 examples application. Like described in the readme, I removed the win32 SWT fragment and renamed the Evolve JAR to match the filename.

This fails due to the following error:

java.lang.ClassCastException: class org.eclipse.swt.widgets.SwtComposite cannot be cast to class org.eclipse.swt.widgets.DartControl (org.eclipse.swt.widgets.SwtComposite and org.eclipse.swt.widgets.DartControl are in unnamed module of loader org.eclipse.osgi.internal.loader.EquinoxClassLoader @139f7944)
        at org.eclipse.swt.widgets.DartControl.computeBoundsZoom(DartControl.java:4168)
        at org.eclipse.swt.widgets.DartControl.computeSize(DartControl.java:619)
        at org.eclipse.swt.widgets.Control.computeSize(Control.java:542)
        at org.eclipse.jface.dialogs.Dialog.setButtonLayoutData(Dialog.java:957)
        at org.eclipse.jface.dialogs.Dialog.createButton(Dialog.java:626)
        at org.eclipse.jface.dialogs.ErrorDialog.createButtonsForButtonBar(ErrorDialog.java:175)
        at org.eclipse.jface.dialogs.IconAndMessageDialog.createButtonBar(IconAndMessageDialog.java:176)
        at org.eclipse.jface.dialogs.IconAndMessageDialog.createDialogAndButtonArea(IconAndMessageDialog.java:226)
        at org.eclipse.jface.dialogs.ErrorDialog.createDialogAndButtonArea(ErrorDialog.java:262)
        at org.eclipse.jface.dialogs.IconAndMessageDialog.createContents(IconAndMessageDialog.java:204)
        at org.eclipse.jface.window.Window.create(Window.java:426)
        at org.eclipse.jface.dialogs.Dialog.create(Dialog.java:1090)
        at org.eclipse.jface.window.Window.open(Window.java:783)
        at org.eclipse.jface.dialogs.ErrorDialog.open(ErrorDialog.java:348)
        at org.eclipse.e4.ui.internal.workbench.swt.WorkbenchStatusReporter.openDialog(WorkbenchStatusReporter.java:125)
        at org.eclipse.e4.ui.internal.workbench.swt.WorkbenchStatusReporter.report(WorkbenchStatusReporter.java:62)
        at org.eclipse.e4.core.services.statusreporter.StatusReporter.show(StatusReporter.java:133)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5$1.eventLoopException(PartRenderingEngine.java:1137)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.handle(PartRenderingEngine.java:1178)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.lambda$1(PartRenderingEngine.java:1155)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:45)
        at org.eclipse.swt.widgets.SwtSynchronizer.runAsyncMessages(SwtSynchronizer.java:141)
        at org.eclipse.swt.widgets.SwtDisplay.runAsyncMessages(SwtDisplay.java:4388)
        at org.eclipse.swt.widgets.SwtDisplay.readAndDispatch(SwtDisplay.java:3995)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:1456)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
        at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1051)
        at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
        at org.eclipse.e4.ui.internal.workbench.swt.E4Application.start(E4Application.java:166)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:219)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:149)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:115)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:467)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:298)
        at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
        at java.base/java.lang.reflect.Method.invoke(Method.java:580)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:615)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:563)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1415)

Then I tried the simpler way and created a SWT only runtime for the NatTable examples application. Only the NatTableExamples.jar, the SWT JAR (interfaces, not the OS dependent fragment) and the Evolve JAR. Then I tried to launch it via

java -cp * org.eclipse.nebula.widgets.nattable.examples.NatTableExamples

This fails due to the following error:

Exception in thread "main" java.lang.ClassCastException: class org.eclipse.swt.widgets.SwtShell cannot be cast to class org.eclipse.swt.widgets.DartControl (org.eclipse.swt.widgets.SwtShell and org.eclipse.swt.widgets.DartControl are in unnamed module of loader 'app')
        at org.eclipse.swt.widgets.DartControl.computeBoundsZoom(DartControl.java:4168)
        at org.eclipse.swt.widgets.DartControl.computeSize(DartControl.java:619)
        at org.eclipse.swt.widgets.Control.computeSize(Control.java:542)
        at org.eclipse.swt.layout.GridData.computeSize(GridData.java:527)
        at org.eclipse.swt.layout.SwtGridLayout.layout(SwtGridLayout.java:146)
        at org.eclipse.swt.layout.SwtGridLayout.layout(SwtGridLayout.java:120)
        at org.eclipse.swt.layout.GridLayout.layout(GridLayout.java:180)
        at org.eclipse.swt.widgets.SwtComposite.updateLayout(SwtComposite.java:1397)
        at org.eclipse.swt.widgets.SwtComposite.WM_SIZE(SwtComposite.java:1815)
        at org.eclipse.swt.widgets.SwtCanvas.WM_SIZE(SwtCanvas.java:463)
        at org.eclipse.swt.widgets.SwtDecorations.WM_SIZE(SwtDecorations.java:1774)
        at org.eclipse.swt.widgets.SwtControl.windowProc(SwtControl.java:5406)
        at org.eclipse.swt.widgets.SwtCanvas.windowProc(SwtCanvas.java:349)
        at org.eclipse.swt.widgets.SwtDecorations.windowProc(SwtDecorations.java:1593)
        at org.eclipse.swt.widgets.SwtShell.windowProc(SwtShell.java:2532)
        at org.eclipse.swt.widgets.SwtDisplay.windowProc(SwtDisplay.java:5403)
        at org.eclipse.swt.internal.win32.OS.ShowWindow(Native Method)
        at org.eclipse.swt.widgets.SwtDecorations.setVisible(SwtDecorations.java:1385)
        at org.eclipse.swt.widgets.SwtShell.setVisible(SwtShell.java:2264)
        at org.eclipse.swt.widgets.SwtShell.open(SwtShell.java:1367)
        at org.eclipse.swt.widgets.Shell.open(Shell.java:655)

I have the org.eclipse.swt_3.133.0.v20260225-1014.jar in my runtimes, start the applications using Java 21.

Any ideas what could be wrong? From the docs I would assume this should work. I really can't explain the classloading issues.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions