Правильно ли задан этот путь к классу Java? - PullRequest
1 голос
/ 11 июня 2019

Я действительно понятия не имею, что мне не хватает.Я провел много часов, читая о том, как установить classpath, но это все еще не работает, на данный момент я убежден, что это должно быть что-то тривиальное, что ускользает от меня.

Я пытаюсь использовать свинг библиотеки сияния для изменения внешнего вида свингового приложения.Я следовал документации по сборке , чтобы создать файлы jar, а когда они не работали, я загружал и пробовал готовые двоичные файлы .Я открыл проблему с разработчиком и подтвердил, что правильно выполняю инструкции .Код для демонстрации выглядит следующим образом:

import java.awt.*;
import javax.swing.*;
import java.awt.image.*;

public class Walkthrough extends JFrame {
  public Walkthrough() {
    super("Sample app");
    this.setLayout(new FlowLayout());
    this.add(new JButton("button"));
    this.add(new JCheckBox("check"));
    this.add(new JLabel("label"));

    this.setIconImage(new BufferedImage(1, 1, BufferedImage.TYPE_4BYTE_ABGR));
    this.setSize(new Dimension(250, 80));
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  }

  public static void main(String[] args) {
    JFrame.setDefaultLookAndFeelDecorated(true);

    SwingUtilities.invokeLater(() -> {
        Walkthrough w = new Walkthrough();
        w.setVisible(true);
    });
  }
}

Код сначала компилируется с javac Walkthrough.java и выполняется с java Walkthrough.Это отлично работает.Затем для изменения внешнего вида используются баночки сияния, для этого нужно установить свойство swing.defaultlaf, чтобы использовать скин из сияния.Вот где это не работает.

Я скопировал все необходимые файлы jar в каталог tmp, где пример Walkthrough существует непосредственно за пределами tmp.Затем я пытаюсь запустить приложение следующим образом:

java -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel -cp .:tmp/radiance-substance-2.5-SNAPSHOT.jar:tmp/radiance-trident-2.5-SNAPSHOT.jar:tmp/radiance-neon-2.5-SNAPSHOT.jar Walkthrough 

, что приводит к следующему исключению:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot load org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel
    at java.desktop/javax.swing.UIManager.initializeDefaultLAF(UIManager.java:1406)
    at java.desktop/javax.swing.UIManager.initialize(UIManager.java:1517)
    at java.desktop/javax.swing.UIManager.maybeInitialize(UIManager.java:1483)
    at java.desktop/javax.swing.UIManager.getUI(UIManager.java:1056)
    at java.desktop/javax.swing.JPanel.updateUI(JPanel.java:126)
    at java.desktop/javax.swing.JPanel.<init>(JPanel.java:86)
    at java.desktop/javax.swing.JPanel.<init>(JPanel.java:109)
    at java.desktop/javax.swing.JPanel.<init>(JPanel.java:117)
    at java.desktop/javax.swing.JRootPane.createGlassPane(JRootPane.java:521)
    at java.desktop/javax.swing.JRootPane.<init>(JRootPane.java:348)
    at java.desktop/javax.swing.JFrame.createRootPane(JFrame.java:279)
    at java.desktop/javax.swing.JFrame.frameInit(JFrame.java:258)
    at java.desktop/javax.swing.JFrame.<init>(JFrame.java:225)
    at Walkthrough.<init>(Walkthrough.java:7)
    at Walkthrough.lambda$main$0(Walkthrough.java:23)
    at java.desktop/java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:313)
    at java.desktop/java.awt.EventQueue.dispatchEventImpl(EventQueue.java:770)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:721)
    at java.desktop/java.awt.EventQueue$4.run(EventQueue.java:715)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:389)
    at java.base/java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:85)
    at java.desktop/java.awt.EventQueue.dispatchEvent(EventQueue.java:740)
    at java.desktop/java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:203)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:124)
    at java.desktop/java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:113)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:109)
    at java.desktop/java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.desktop/java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel живет в сиянии-вещества-2,5-SNAPSHOT.jar.Я подтвердил, что это действительно там с jar tvf:

jar tvf radiance-substance-2.5-SNAPSHOT.jar | grep SubstanceBusinessLookAndFeel
   548 Fri Feb 01 00:00:00 GMT 1980 org/pushingpixels/substance/api/skin/SubstanceBusinessLookAndFeel.class

Так что на данный момент я уверен, что что-то напутал с classpath , но я простоне знаю что.Я нахожусь на Fedora 28, и моя версия Java:

java version "12.0.1" 2019-04-16
Java(TM) SE Runtime Environment (build 12.0.1+12)
Java HotSpot(TM) 64-Bit Server VM (build 12.0.1+12, mixed mode, sharing)

1 Ответ

1 голос
/ 13 июня 2019

Ну, это не имеет ничего общего с classpath, а скорее с самими библиотеками jar.Я заметил, что шрифт не был сглажен по умолчанию на моей машине (Fedora 28, используя i3-gaps в качестве оконного менеджера).Я задавался вопросом, было ли это как-то связано, и читал шрифты среды выполнения Java.По сути, шрифты выглядели так:

enter image description here

Но запуск приложения с этим системным свойством: -Dawt.useSystemAAFontSettings=on исправлено:

enter image description here

Оказывается, что настройка этого свойства при запуске Walkthrough with Radiance заставляет его работать:

java -Dawt.useSystemAAFontSettings=on -Dswing.defaultlaf=org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel -cp .:tmp/radiance-substance-2.5-SNAPSHOT.jar:tmp/radiance-trident-2.5-SNAPSHOT.jar:tmp/radiance-neon-2.5-SNAPSHOT.jar Walkthrough.

enter image description here

При удалении этого свойства Java не может загрузить org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel.

Чтение здесь имеет больше информации.Я предполагаю , потому что я настроил свою установку Fedora 28 (я не использую gnome) - причина, по которой у меня не работает gnome-settings-daemon, из которого Java использует системные значения по умолчанию, и это как-топроблема для Сияния ...?Не уверен.

Я сообщил об этом разработчику Radiance.Я обновлю этот ответ, если / когда он предоставит отзыв.

ОБНОВЛЕНИЕ Разработчик подтвердил, что в библиотеке есть ошибка.Это было исправлено.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...