Java Substance - 奇怪的异常

3

我在我的Java Swing应用程序中使用了Substance外观版本6.0。应用程序对我来说运行良好,但是一些应用程序用户,特别是那些使用Windows 7的用户,会出现Substance异常:

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的问题,如果你能帮我解决这个问题,我将感激不尽。


异常在 Methods.java 的 newInstance 方法中抛出。 - denolk
https://dev59.com/rm865IYBdhLWcg3wKLT6 - mKorbel
3个回答

4

Substances已不再更新,且在Java 7上无法工作。

但是有人通过分叉项目并将其命名为insubstance来继续开发该项目:http://shemnon.com/speling/

它支持Java 7,并且似乎计划在下一次更新中进行大规模的更新。

只需切换库即可使其在您的项目中工作。


2

目前的insubstantial构建(它是Substance的维护分支)和SwingX没有展示这个错误,因此这是一个已经被修复的bug。

以下是一段代码示例:

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>

1
我不了解Substance,但在源代码中可以看到,当颜色选择器面板实例化期间抛出任何异常时,会抛出此InternalError。不幸的是(这里有糟糕的代码!)真正的异常被吞掉了,所以你没有简单的方法来查看它。但是真正异常的堆栈跟踪将被打印到System.err,因此您应该能够在某个地方看到此输出。此堆栈跟踪将为您提供有关问题的更多信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接