将 Steelseries JAR 文件加载到 Swing 调色板

Loading Steelseries JAR file to Swing palette

我刚开始将 NetBeans 用于我的一个项目,我需要在我的 GUI 中使用一个仪表。我遇到了看起来很有前途的 Steelseries,并下载了这个 JAR 文件:

http://www.java2s.com/Code/Jar/s/DownloadSteelSeries3926jar.htm

我创建了一个 Java 项目,向其中添加了库,并添加了 Swing 调色板。 LightbulbLedTrafficLight 等一些 bean 工作正常;但是当我选择一个仪表时,我得到这个错误:

"Cannot load component class eu.hansolo.steelseries.extras.Radar from JAR file. The class itself was found, but there was a problem initializing it, e.g. due to an exception in static initializer, or failure in loading an additional class needed by the component class."

异常堆栈跟踪如下:

java.lang.NoClassDefFoundError: org/pushingpixels/trident/ease/TimelineEase
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:348)
    at org.netbeans.modules.form.project.ClassPathUtils.loadClass(ClassPathUtils.java:114)
    at org.netbeans.modules.form.MetaComponentCreator.run(MetaComponentCreator.java:1450)
    at org.netbeans.modules.form.FormLAF.run(FormLAF.java:293)
    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.doEventAccess(NbMutexEventProvider.java:138)
    at org.netbeans.modules.openide.util.NbMutexEventProvider$Event.readAccess(NbMutexEventProvider.java:98)
    at org.netbeans.modules.openide.util.LazyMutexImplementation.readAccess(LazyMutexImplementation.java:94)
    at org.openide.util.Mutex.readAccess(Mutex.java:250)
    at org.netbeans.modules.form.FormLAF.executeWithLookAndFeel(FormLAF.java:276)
    at org.netbeans.modules.form.MetaComponentCreator.prepareClass(MetaComponentCreator.java:1446)
    at org.netbeans.modules.form.MetaComponentCreator.precreateVisualComponent(MetaComponentCreator.java:258)
    at org.netbeans.modules.form.MetaComponentCreator.precreateVisualComponent(MetaComponentCreator.java:298)
    at org.netbeans.modules.form.HandleLayer$NewComponentDrag.init(HandleLayer.java:3369)
    at org.netbeans.modules.form.HandleLayer$NewComponentDrag.<init>(HandleLayer.java:3361)
    at org.netbeans.modules.form.HandleLayer$NewComponentDropListener.dragEnter(HandleLayer.java:3658)
    at java.awt.dnd.DropTarget.dragEnter(DropTarget.java:358)
    at sun.awt.dnd.SunDropTargetContextPeer.processEnterMessage(SunDropTargetContextPeer.java:331)
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEnterEvent(SunDropTargetContextPeer.java:799)
    at sun.awt.dnd.SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetContextPeer.java:767)
    at sun.awt.dnd.SunDropTargetEvent.dispatch(SunDropTargetEvent.java:48)
    at java.awt.Component.dispatchEventImpl(Component.java:4746)
    at java.awt.Container.dispatchEventImpl(Container.java:2294)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
    at java.awt.LightweightDispatcher.retargetMouseEnterExit(Container.java:4676)
    at java.awt.LightweightDispatcher.trackDropTargetEnterExit(Container.java:4625)
    at java.awt.LightweightDispatcher.trackMouseEnterExit(Container.java:4638)
    at java.awt.LightweightDispatcher.processDropTargetEvent(Container.java:4591)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4461)
    at java.awt.Container.dispatchEventImpl(Container.java:2280)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4713)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
    at java.awt.EventQueue.access0(EventQueue.java:97)
    at java.awt.EventQueue.run(EventQueue.java:709)
    at java.awt.EventQueue.run(EventQueue.java:703)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue.run(EventQueue.java:731)
    at java.awt.EventQueue.run(EventQueue.java:729)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
    at org.netbeans.core.TimableEventQueue.dispatchEvent(TimableEventQueue.java:159)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
Caused by: java.lang.ClassNotFoundException: org.pushingpixels.trident.ease.TimelineEase
    at org.netbeans.modules.form.project.ProjectClassLoader.findClass(ProjectClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 52 more

SteelSeries, originally hosted on Kenai, has moved to GitHub. The project depends on the Trident library, as seen here and in the pom.xml.

Do you also know why the Steelseries library is missing those needed modules?

link you mention cites pre-built JAR files, each of which excludes the dependent lib directory seen here or the artifact reference cited here. The exact approach you take going forward will depend on your software configuration management 计划。