我正在尝试合成器样式,遇到了以下问题,经过大量研究后仍未找到答案。我有以下xml文件

<?xml version="1.0" encoding="UTF-8"?>
<synth>
    <style id="button">
        <state>
            <color value="blue" type="BACKGROUND"/>
            <color value="yellow" type="FOREGROUND"/>
        </state>
    </style>
    <bind style="button" type="region" key="Button"/>
</synth>


以及以下Java代码,将该XML文件作为SynthLookAndFeel对象加载

private void initializeStyle() {
    SynthLookAndFeel laf = new SynthLookAndFeel();
    try {
        laf.load(this.getClass().getResourceAsStream("Style.xml"), this.getClass());
        UIManager.setLookAndFeel(laf);
    } catch (ParseException | UnsupportedLookAndFeelException e) {
        e.printStackTrace();
    }
}


当我尝试运行此代码时,出现以下异常

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: You must supply an InputStream, StyleFactory and Class or URL


我们欢迎任何有关如何解决此问题的建议。

最佳答案

您可以在Advanced Synth中找到一个很好的例子。

您可以在示例中看到:

SynthLookAndFeel synth = new SynthLookAndFeel();
synth.load(SynthFrame.class.getResourceAsStream("demo.xml"), SynthFrame.class);
UIManager.setLookAndFeel(synth);


并且demo.xml位于demo.synth包中,与SynthFrame类相同,该XML包含一些图像:

<imageIcon id="check_off" path="images/checkbox_off.png"/>


checkbox_off.png位于demo.synth.images包中的位置。

希望对您有所帮助。

07-24 17:21