Flamingo ribbon:Java.lang.IllegalArgumentException:未找到用于Java.lang.Float:Java.lang.Float的插值器
我在一个NetBeans项目中使用Flamingo功能区条,我遇到了一个主要问题:有时(很抱歉,我不能更具体地说,因为我真的不知道如何始终如一地复制它),我会遇到以下异常:Flamingo ribbon:Java.lang.IllegalArgumentException:未找到用于Java.lang.Float:Java.lang.Float的插值器,java,swing,netbeans-platform,radiance-flamingo,Java,Swing,Netbeans Platform,Radiance Flamingo,我在一个NetBeans项目中使用Flamingo功能区条,我遇到了一个主要问题:有时(很抱歉,我不能更具体地说,因为我真的不知道如何始终如一地复制它),我会遇到以下异常: Java.lang.IllegalArgumentException: No interpolator found for java.lang.Float:java.lang.Float at org.pushingpixels.trident.TimelinePropertyBuilder.getFieldInfo(Tim
Java.lang.IllegalArgumentException: No interpolator found for java.lang.Float:java.lang.Float
at org.pushingpixels.trident.TimelinePropertyBuilder.getFieldInfo(TimelinePropertyBuilder.java:257)
at org.pushingpixels.trident.Timeline.addPropertyToInterpolate(Timeline.java:353)
at org.pushingpixels.trident.Timeline.addPropertyToInterpolate(Timeline.java:363)
at org.pushingpixels.flamingo.internal.ui.ribbon.BasicRibbonBandUI.installUI(BasicRibbonBandUI.java:168)
at javax.swing.JComponent.setUI(Unknown Source)
at org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.setUI(AbstractRibbonBand.java:232)
at org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.updateUI(AbstractRibbonBand.java:245)
at org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.<init>(AbstractRibbonBand.java:205)
at org.pushingpixels.flamingo.api.ribbon.JRibbonBand.<init>(JRibbonBand.java:169)
at com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonBand(RibbonComponentFactory.java:216)
at com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonBands(RibbonComponentFactory.java:207)
at com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonTask(RibbonComponentFactory.java:195)
at com.pinkmatter.modules.flamingo.LayerRibbonComponentProvider.addTaskPanes(LayerRibbonComponentProvider.java:101)
at com.pinkmatter.modules.flamingo.LayerRibbonComponentProvider.createRibbon(LayerRibbonComponentProvider.java:56)
at com.pinkmatter.modules.flamingo.Installer$2.run(Installer.java:69)
[catch] at org.netbeans.core.windows.WindowManagerImpl$Exclusive$1.run(WindowManagerImpl.java:1563)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$200(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Java.lang.IllegalArgumentException:未找到Java.lang.Float:Java.lang.Float的插值器
在org.pushingpixels.trident.TimelinePropertyBuilder.getFieldInfo(TimelinePropertyBuilder.java:257)
位于org.pushingpixels.trident.Timeline.addPropertyToInterpolate(Timeline.java:353)
位于org.pushingpixels.trident.Timeline.addPropertyToInterpolate(Timeline.java:363)
位于org.pushingpixels.flamingo.internal.ui.ribbon.BasicRibbonBandUI.installUI(BasicRibbonBandUI.java:168)
位于javax.swing.JComponent.setUI(未知源代码)
位于org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.setUI(AbstractRibbonBand.java:232)
位于org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.updateUI(AbstractRibbonBand.java:245)
位于org.pushingpixels.flamingo.api.ribbon.AbstractRibbonBand.(AbstractRibbonBand.java:205)
位于org.pushingpixels.flamingo.api.ribbon.JRibbonBand.(JRibbonBand.java:169)
位于com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonBand(RibbonComponentFactory.java:216)
位于com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonBands(RibbonComponentFactory.java:207)
位于com.pinkmatter.modules.flamingo.RibbonComponentFactory.createRibbonTask(RibbonComponentFactory.java:195)
位于com.pinkmatter.modules.flamingo.LayerRibbonComponentProvider.addTaskPanes(LayerRibbonComponentProvider.java:101)
位于com.pinkmatter.modules.flamingo.LayerRibbonComponentProvider.createRibbon(LayerRibbonComponentProvider.java:56)
位于com.pinkmatter.modules.flamingo.Installer$2.run(Installer.java:69)
[catch]位于org.netbeans.core.windows.WindowManagerImpl$Exclusive$1.run(WindowManagerImpl.java:1563)
在java.awt.event.InvocationEvent.dispatch(未知源)处
位于java.awt.EventQueue.dispatchEventImpl(未知源)
位于java.awt.EventQueue.access$200(未知源)
在java.awt.EventQueue$3.run处(未知源)
在java.awt.EventQueue$3.run处(未知源)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.security.ProtectionDomain$1.doIntersectionPrivilege(未知源)
位于java.awt.EventQueue.dispatchEvent(未知源)
位于java.awt.EventDispatchThread.pumpOneEventForFilters(未知源)
位于java.awt.EventDispatchThread.pumpEventsForFilter(未知源)
位于java.awt.EventDispatchThread.pumpEventsForHierarchy(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.pumpEvents(未知源)
位于java.awt.EventDispatchThread.run(未知源)
功能区栏未初始化(因此我的软件无法使用)。有时,如果我关闭并重新启动它,它会正确启动,而有时则不会。我一点也不知道发生了什么事;在某个地方,我读到一些关于使用了错误的类加载器的信息,但我现在真的找不到那个链接。。。有人能帮忙吗?当然,如果需要,我可以提供更多细节
谢谢正如在其他评论中所说,我找到了一个解决方案(很抱歉,我之前没有提供) 基本上,问题是使用了错误的类装入器来查找插值器。因此,我确保始终使用系统类装入器进行实例化。为此,我修改了两个文件: 在
com.pinkmatter.modules.flamingo.RibbonComponentFactory.getOrCreateActionItem()中
:
有了这两个变化,我对插值器再也没有任何问题了。希望这能有所帮助。虽然公认的答案可以解决问题,但这不是正确的方法。基本上,以上是一个解决一开始就不应该存在/不存在的问题的方法。由于trident库的许多源代码和二进制文件传输,导致一个非常重要的文件被遗留下来。从而像病毒一样传播病毒 该文件名为trident plugin.properties,令人震惊的是,其中存储了可用插值器的位置 因此,显而易见的修复方法是将此文件添加到META-INF目录中受影响的包中 为便于快速参考,以下是其内容:
UIToolkitHandler=org.pushingpixels.trident.swing.SwingToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.swing.AWTPropertyInterpolators
UIToolkitHandler=org.pushingpixels.trident.swt.SWTToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.swt.SWTPropertyInterpolators
UIToolkitHandler=org.pushingpixels.trident.android.AndroidToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.android.AndroidPropertyInterpolators
PropertyInterpolatorSource=org.pushingpixels.trident.interpolator.CorePropertyInterpolators
虽然我不能再测试这个解决方案了,但这显然是解决方案的最佳方法。我希望我以前知道这件事!
public AbstractRibbonBand createRibbonBand(ActionItem item) {
//TODO icon
JRibbonBand band = null;
ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
ClassLoader systemClassLoader = Lookup.getDefault().lookup(ClassLoader.class);
Thread.currentThread().setContextClassLoader(systemClassLoader);
try {
String text = item.getValue("displayName") == null ? item.getText() : item.getValue("displayName").toString();
band = new JRibbonBand(text, ResizableIcons.empty(), getDefaultAction(item));
for (ActionItem child : item.getChildren()) {
if (child.isSeparator()) {
band.startGroup();
} else if (child.getValue(ActionItem.DEFAULT_ACTION) != Boolean.TRUE) {
addRibbonBandAction(band, child);
}
}
band.setResizePolicies(Arrays.<RibbonBandResizePolicy>asList(
new Mid2Mid(band.getControlPanel())));
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
}
return band;
}
UIToolkitHandler=org.pushingpixels.trident.swing.SwingToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.swing.AWTPropertyInterpolators
UIToolkitHandler=org.pushingpixels.trident.swt.SWTToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.swt.SWTPropertyInterpolators
UIToolkitHandler=org.pushingpixels.trident.android.AndroidToolkitHandler
PropertyInterpolatorSource=org.pushingpixels.trident.android.AndroidPropertyInterpolators
PropertyInterpolatorSource=org.pushingpixels.trident.interpolator.CorePropertyInterpolators