gpt4 book ai didi

java - 这个java类路径设置正确吗?

转载 作者:行者123 更新时间:2023-11-30 05:36:17 24 4
gpt4 key购买 nike

我真的不知道我错过了什么。我花了很多时间阅读如何设置类路径,但这仍然不起作用,在这一点上我确信这一定是我忽略的一些微不足道的事情。

我正在尝试使用 Swing radiance libraries更改 Swing 应用程序的外观和感觉。我关注了build documentation制作 jar 文件,当这些文件不起作用时,我下载并尝试了 prebuilt binaries 。我向开发人员提出了一个问题,并确认我正在遵循 getting started instructions正确。演示代码如下:

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执行。这很好用。接下来,使用光辉 jar 来更改外观和感觉,这是通过设置 swing.defaultlaf 属性以使用光辉皮肤来完成的。这是它不起作用的地方。

我将所有必需的 jar 复制到 tmp 目录中,其中演练示例紧邻 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 位于 radiance-substance-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

所以在这一点上我确信我把类路径弄乱了,但我只是不知道是什么。我使用的是 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)

最佳答案

这与类路径无关,而与 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 演练

enter image description here

删除此属性会导致 Java 无法加载 org.pushingpixels.substance.api.skin.SubstanceBusinessLookAndFeel 的错误。

阅读here有更多信息。我假设是因为我自定义了 Fedora 28 设置(我不使用 gnome),这就是我没有运行 Java 的 gnome-settings-daemon 的原因用于获取系统默认值,这对 Radiance 来说是一个问题......?不确定。

我已将此事通知 Radiance 开发人员。如果/当他提供反馈时,我会更新此答案。

更新开发人员确认库中存在错误。已修复。

关于java - 这个java类路径设置正确吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56545385/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com