【问题标题】:Java Substance - Strange exceptionJava Substance - 奇怪的异常
【发布时间】:2011-09-15 07:04:56
【问题描述】:

我在我的 Java Swing 应用程序中使用 Substance 外观 6.0 版。该应用程序对我来说运行良好,但一些应用程序用户,尤其是那些使用 Windows 7 的用户遇到了实质性异常:

java.lang.InternalError: Unable to instantiate org.pushingpixels.substance.internal.contrib.randelshofer.quaqua.colorchooser.ColorPalettesChooser
at org.pushingpixels.substance.internal.ui.SubstanceColorChooserUI.createDefaultChoosers(SubstanceColorChooserUI.java)
at org.pushingpixels.substance.internal.contrib.randelshofer.quaqua.Quaqua13ColorChooserUI.__org__pushingpixels__substance__internal__contrib__randelshofer__quaqua__Quaqua13ColorChooserUI__installUI(Quaqua13ColorChooserUI.java)
at org.pushingpixels.substance.internal.contrib.randelshofer.quaqua.Quaqua13ColorChooserUI.installUI(Quaqua13ColorChooserUI.java)
at org.pushingpixels.substance.internal.contrib.randelshofer.quaqua.Quaqua14ColorChooserUI.__org__pushingpixels__substance__internal__contrib__randelshofer__quaqua__Quaqua14ColorChooserUI__installUI(Quaqua14ColorChooserUI.java)
at org.pushingpixels.substance.internal.contrib.randelshofer.quaqua.Quaqua14ColorChooserUI.installUI(Quaqua14ColorChooserUI.java)
at org.pushingpixels.substance.internal.ui.SubstanceColorChooserUI.__org__pushingpixels__substance__internal__ui__SubstanceColorChooserUI__installUI(SubstanceColorChooserUI.java)
at org.pushingpixels.substance.internal.ui.SubstanceColorChooserUI.installUI(SubstanceColorChooserUI.java)
at javax.swing.JComponent.setUI(Unknown Source)
at javax.swing.JColorChooser.setUI(Unknown Source)
at javax.swing.JColorChooser.updateUI(Unknown Source)
at javax.swing.JColorChooser.(Unknown Source)
at javax.swing.JColorChooser.(Unknown Source)
at javax.swing.JColorChooser.(Unknown Source)
at org.jdesktop.swingx.JXColorSelectionButton.getChooser(JXColorSelectionButton.java)
at org.jdesktop.swingx.JXColorSelectionButton$1.propertyChange(JXColorSelectionButton.java)
at java.beans.PropertyChangeSupport.fire(Unknown Source)
at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
at java.beans.PropertyChangeSupport.firePropertyChange(Unknown Source)
at java.awt.Component.firePropertyChange(Unknown Source)
at java.awt.Component.setBackground(Unknown Source)
at javax.swing.JComponent.setBackground(Unknown Source)

这个异常发生在这段代码的最后一行:

JXColorSelectionButton myColorSelectionButton = new JXColorSelectionButton();

myColorSelectionButton.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
myColorSelectionButton.setFocusPainted(false);
contentPane.add(myColorSelectionButton, cc.xy(29, 19));
/**
  * Some code here
  */
myColorSelectionButton.setBackground( Color.WHITE );  // Excepton occurres here !!

我找不到问这个 Substance 问题的地方,所以如果你能帮助我,将不胜感激。

【问题讨论】:

标签: java swing exception substance


【解决方案1】:

Substance 不再更新,在 Java 7 上已损坏。

但是有人通过分叉并称其为 insubstance 来选择该项目:http://shemnon.com/speling/

它支持 Java 7 并且似乎对下一次更新有很大的计划。

它应该像交换库以使其在您的项目中工作一样简单。

【讨论】:

    【解决方案2】:

    insubstantial(这是 Substance 的维护分支)和 SwingX 的当前版本没有出现此错误,因此这是一个已修复的错误。

    这是一个代码示例

    import java.awt.Color
    import javax.swing.*
    import org.jdesktop.swingx.JXColorSelectionButton
    
    SwingUtilities.invokeAndWait {
    @Grapes( 
    [@Grab(group='org.swinglabs', module='swingx-core', version='1.6.2-2'),
    @Grab(group='com.github.insubstantial', module='substance-swingx', version='7.0') ]
    )
        JFrame frame = new JFrame("Test");
        JXColorSelectionButton myColorSelectionButton = new JXColorSelectionButton();
    
        myColorSelectionButton.setFocusPainted(false);
        frame.add(myColorSelectionButton);
        myColorSelectionButton.setBackground( Color.WHITE );  // Excepton occurres here !!
        frame.pack()
        frame.setVisible(true)
    }
    

    相关的 Maven 坐标:

    <dependency>
        <groupId>com.github.insubstantial</groupId>
        <artifactId>substance</artifactId>
        <version>7.0</version>
    </dependency>
    
    <dependency>
        <groupId>org.swinglabs</groupId>
        <artifactId>swingx-core</artifactId>
        <version>1.6.2-2</version>
    </dependency>
    <dependency>
        <groupId>com.github.insubstantial</groupId>
        <artifactId>substance-swingx</artifactId>
        <version>7.0</version>
    </dependency>
    

    【讨论】:

      【解决方案3】:

      我不知道 Substance,但是在 source code 中可以看到,在颜色选择器面板的实例化过程中抛出任何异常时都会抛出这个 InternalError。不幸的是(这里的代码不好!)真正的异常被吞没了,所以你很难看到这一点。但是真正异常的堆栈跟踪会打印到 System.err,因此您应该能够在某处看到此输出。此堆栈跟踪将为您提供有关此处问题所在的更多信息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-16
        • 1970-01-01
        • 1970-01-01
        • 2011-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多