Java UIDefaults.getUI()失败:将JFrame加载到另一个项目时出错

Java UIDefaults.getUI()失败:将JFrame加载到另一个项目时出错,java,swing,look-and-feel,Java,Swing,Look And Feel,我发现它在独立运行时工作得很好。但是,当我尝试将其添加到另一个项目中的JPanel时(在完全相同的项目中已经这样做了,但使用了我自己的JFrame并且运行良好),会出现以下错误: UIDefaults.getUI() failed: no ComponentUI class for: doubleslider.MThumbSlider[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,mini

我发现它在独立运行时工作得很好。但是,当我尝试将其添加到另一个项目中的JPanel时(在完全相同的项目中已经这样做了,但使用了我自己的JFrame并且运行良好),会出现以下错误:

 UIDefaults.getUI() failed: no ComponentUI class for: doubleslider.MThumbSlider[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]
    java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:759)
        at javax.swing.UIManager.getUI(UIManager.java:1002)
        at javax.swing.JSlider.updateUI(JSlider.java:323)
        at doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)
        at javax.swing.JSlider.<init>(JSlider.java:275)
        at javax.swing.JSlider.<init>(JSlider.java:182)
        at doubleslider.MThumbSlider.<init>(MThumbSlider.java:24)
        at doubleslider.DoubleSlider.<init>(DoubleSlider.java:29)
        at com.einge.scadaremotecontrol.Ventana.<init>(Ventana.java:227)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.<init>(ScadaRemoteControl.java:92)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.main(ScadaRemoteControl.java:197)
    UIDefaults.getUI() failed: no ComponentUI class for: doubleslider.MThumbSlider[,0,0,0x0,invalid,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]
    java.lang.Error
        at javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
        at javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
        at javax.swing.UIDefaults.getUI(UIDefaults.java:759)
        at javax.swing.UIManager.getUI(UIManager.java:1002)
        at javax.swing.JSlider.updateUI(JSlider.java:323)
        at doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)
        at doubleslider.MThumbSlider.<init>(MThumbSlider.java:26)
        at doubleslider.DoubleSlider.<init>(DoubleSlider.java:29)
        at com.einge.scadaremotecontrol.Ventana.<init>(Ventana.java:227)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.<init>(ScadaRemoteControl.java:92)
        at com.einge.scadaremotecontrol.ScadaRemoteControl.main(ScadaRemoteControl.java:197)
UIDefaults.getUI()失败:没有用于doubleslider.MThumbSlider的ComponentUI类[,0,0,0x0,无效,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,minorTickSpacing=0,orientation=HORIZONTAL,paintLabels=false,paintTicks=false,paintTrack=true,snapToTicks=false,snapToValue=true]
java.lang.Error
在javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
位于javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
位于javax.swing.UIDefaults.getUI(UIDefaults.java:759)
位于javax.swing.UIManager.getUI(UIManager.java:1002)
位于javax.swing.JSlider.updateUI(JSlider.java:323)
在doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)中
位于javax.swing.JSlider(JSlider.java:275)
位于javax.swing.JSlider。(JSlider.java:182)
在doubleslider.MThumbSlider.(MThumbSlider.java:24)
在doubleslider.doubleslider.(doubleslider.java:29)
在com.einge.scadaremotecontrol.Ventana.(Ventana.java:227)
scadaremotecontrol.scadaremotecontrol.(scadaremotecontrol.java:92)
位于com.einge.scadaremotecontrol.scadaremotecontrol.main(scadaremotecontrol.java:197)
UIDefaults.getUI()失败:没有用于的ComponentUI类:doubleslider.MThumbSlider[,0,0,0x0,无效,alignmentX=0.0,alignmentY=0.0,border=,flags=0,maximumSize=,minimumSize=,preferredSize=,isInverted=false,majorTickSpacing=0,orientation=Horizontation,paintLabels=false,paintTrack=true,snapToTicks=false,snapToValue=true]
java.lang.Error
在javax.swing.UIDefaults.getUIError(UIDefaults.java:729)
位于javax.swing.MultiUIDefaults.getUIError(MultiUIDefaults.java:130)
位于javax.swing.UIDefaults.getUI(UIDefaults.java:759)
位于javax.swing.UIManager.getUI(UIManager.java:1002)
位于javax.swing.JSlider.updateUI(JSlider.java:323)
在doubleslider.MThumbSlider.updateUI(MThumbSlider.java:44)中
在doubleslider.MThumbSlider.(MThumbSlider.java:26)
在doubleslider.doubleslider.(doubleslider.java:29)
在com.einge.scadaremotecontrol.Ventana.(Ventana.java:227)
scadaremotecontrol.scadaremotecontrol.(scadaremotecontrol.java:92)
位于com.einge.scadaremotecontrol.scadaremotecontrol.main(scadaremotecontrol.java:197)
我的第一个猜测是MultiTumbSlider类试图设置一个与我的JFrame不同的外观和感觉。有什么解决方案吗?我想不出来,我真的需要两个滑块,以便有一个时间范围


欢迎提供任何帮助!

我不认识这一非常古老的加载方法;它似乎基于当前的外观和感觉。您可以尝试显式设置
javax.swing.plaf.metal.MetalLookAndFeel
。展望未来,请参考Kirill Grouchnikov的指南,了解如何使代理管道现代化。

我不知道认识到这一非常古老的方法中使用的加载方法;它似乎基于当前的外观。您可以尝试显式地设置
javax.swing.plaf.metal.MetalLookAndFeel
。展望未来,请参阅Kirill Grouchnikov的《代理管道现代化指南》。

在《Java swing,第二版》一书中Marc Loy等人在“创建您自己的组件”(第28章:引擎盖下的Swing)一节中介绍了
main()
方法的代码行:

UIManager.put(JogShuttleUI.UI_CLASS_ID, "BasicJogShuttleUI");
这将通过
UIManeger
通知
UIDefaults
,自定义组件的基本UI委托的类名。但是,请注意,您必须提供完全限定类名,因为它将由类加载机制定位

例如,当我使用

UIManager.put(DiagramUI.UI_CLASS_ID, "BasicDiagramUI");
我收到了与你的问题相同的错误报告。但是,当我将其更改为

UIManager.put(DiagramUI.UI_CLASS_ID, BasicDiagramUI.class.getName());
一切都很顺利。编码很好!

在Marc Loy等人的《Java Swing,第二版》一书中,在“创建您自己的组件”(第28章:引擎盖下的Swing)一节中,我们在
main()
方法中有代码行:

UIManager.put(JogShuttleUI.UI_CLASS_ID, "BasicJogShuttleUI");
这将通过
UIManeger
通知
UIDefaults
,自定义组件的基本UI委托的类名。但是,请注意,您必须提供完全限定类名,因为它将由类加载机制定位

例如,当我使用

UIManager.put(DiagramUI.UI_CLASS_ID, "BasicDiagramUI");
我收到了与你的问题相同的错误报告。但是,当我将其更改为

UIManager.put(DiagramUI.UI_CLASS_ID, BasicDiagramUI.class.getName());

一切都很好。编码很好!

您使用的是什么外观和感觉?@trashgood,我将工作项目作为jar文件导入,因此不会出现包问题。@MadProgrammer我使用的是Windows L&F,我怀疑MThumbSlider项目使用的是某种“金属”L&F这也是我所怀疑的,你在使用什么样的外观和感觉?@trashgood,我将工作项目作为jar文件导入,这样就不会出现包问题。@MadProgrammer我正在使用Windows L&F,我怀疑MThumbSlider项目正在使用一些“金属”L&F这也是我所怀疑的,我也在使用updateUI()在MThumbSlider类上找到的加载L&F的方法。通过该方法,我成功地消除了错误,但我的程序中仍然缺少滑块。我发现使此滑块出现的唯一方法是使用按钮显示另一个带有滑块的JFrame,并将我的程序的L&F更改为metal。但我想在JPanel在我的主窗口中。我放弃了这个示例,因为它花了几个小时,没有任何具体内容。您有没有其他方法来制作双滑块(或“范围”滑块)?我成功地遵循了Kirill的指南。很抱歉,我没有更好的方法。将检查该存档中的一个相关示例