Как использовать SynthLookAndFeel с файлом XML, где путь к файлу XML будет загружать файл с использованием метода getResourceAsStream?

Я использую

SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(MyJSlider.class.getResourceAsStream("/ui/demo.xml"), MyJSlider.class);      
//laf.load(new URL("file:///var/tmp/demo.xml"));

Где мой demo.xml имеет следующее:

<style id="SliderTrackStyle">
    <opaque value="TRUE"/>
    <state>
      <imagePainter method="SliderTrackBackground" path="/var/tmp/JavaUnitTest/src/image/menu/bg.jpg" sourceInsets="0 0 0 0" />
    </state>
</style>
<bind style="SliderTrackStyle" type="region" key="SliderTrack" />

Вызывает ошибку:

run-single:
Uncaught error fetching image:
java.lang.NullPointerException
    at sun.awt.image.URLImageSource.getConnection(URLImageSource.java:115)
    at sun.awt.image.URLImageSource.getDecoder(URLImageSource.java:125)
    at sun.awt.image.InputStreamImageSource.doFetch(InputStreamImageSource.java:263)
    at sun.awt.image.ImageFetcher.fetchloop(ImageFetcher.java:205)
    at sun.awt.image.ImageFetcher.run(ImageFetcher.java:169)
BUILD STOPPED (total time: 9 seconds)

Чтобы избежать и иметь меньше рисков.

Как я могу использовать это как path=Menu.class.getResourceAsStream("/image/menu/bg.jpg") где я хотел избежать использования статического пути, показанного в примере.

Следовать за:

3 ответа

Решение

Вы можете найти хороший пример в 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 пакет.

  1. пожалуйста, проверьте, особенно ответ @trashgod показывает основные вещи, но с отличным обходом кода для BasicXxxUI

  2. Я бы использовал Nimbus Look and Feel скорее доисторический и простой Synth,

  3. Nimbus есть похожие проблемы с GUI, дааа и еще несколько ошибок,

  4. Nimbus (на основе простого Synt) может быть проще всего, и вокруг нас есть несколько отличных хаков

Вы также можете добавить файл XML, передав весь путь файла

например

SynthLookAndFeel laf = new SynthLookAndFeel();
laf.load(new URL("file:///D:/Demo/src/example1.xml"));
UIManager.setLookAndFeel(laf);

Меня устраивает. Попробуйте это для вашего приложения

Другие вопросы по тегам