【问题标题】:My application uses AWT even though the jar its built on uses Swing. Why?我的应用程序使用 AWT,即使其构建的 jar 使用 Swing。为什么?
【发布时间】:2014-07-23 20:17:56
【问题描述】:

我有一个应用程序,我编译成一个可执行的 jar 文件,比如说 app.jar。当我运行它时,它看起来就像一个原生的 mac 应用程序,看起来很让人想起我对 swing 的有限了解。然后,我使用Java's appBundler 按照列出的说明捆绑了 jar 文件,然后突然启动同一个项目,看起来像一个 AWT 应用程序(更模糊,更像素化)。

除此之外,jar 文件将以工作目录作为父文件夹启动(如果它是dist/app.jardist 是工作目录),而应用程序将我的用户驱动器(~)显示为工作目录。

这是我捆绑的示例程序:

package test;

import java.io.File;

import javax.swing.JOptionPane;

public class Test{
  public static void main(String[] args) {
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
            JOptionPane.showMessageDialog(null, new File(".").getAbsolutePath());
        }
    });
  }
}

jar 看起来像摇摆,上面写着“/Users/me/Documents/app/dist/”。而应用看起来像 AWT 并显示“/Users/me/”。

切换的任何原因?我更喜欢 swing 和 jar 文件的目录,但我需要将其格式化为应用程序。

【问题讨论】:

标签: java macos swing awt .app


【解决方案1】:

尝试强制外观使用“系统”外观...

public void run() {
    try {
        UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
    } catch (ClassNotFoundException | InstantiationException | IllegalAccessException | UnsupportedLookAndFeelException ex) {
        ex.printStackTrace();
    }
    //...

这应该确保它覆盖任何其他设置...

查看How to Set the Look and Feel了解更多详情

【讨论】:

  • 我尝试将这个添加到上面的程序中,并且在捆绑后出现了同样的问题。没有明显差异。
  • 那么还有其他问题。在 Mac OS 下,默认观感似乎设置为使用系统观感。您的代码可能会在内部改变外观
  • 但我问题中的上述代码就是我正在运行的全部内容!这会改变它吗?
  • 您问题中的代码不会改变外观
  • 我的意思是我将您的代码 (try{...} catch {...}) 直接添加到我的代码中,但出现了同样的问题。
【解决方案2】:

也许 AppBuilder 有点奇怪。 您是否尝试过仅使用 jar 命令构建您的 jar?

http://docs.oracle.com/javase/tutorial/deployment/jar/build.html

【讨论】:

  • 我使用 ant 构建 jar。这就是罐子工作正常的原因!并且 jar 命令可以工作,但往往只能通过命令行使 jar 可执行。我正在为非计算机人员制作应用程序,所以我不能问他们。此外,这应该是评论,而不是答案。
  • 好电话。我的错。我确实找到了大约 2 年前的 this blog post 谈论 AppBuldler 的 Swing/AWT 问题。看起来当时 Swing 和 AWT 应用程序由于对 freetype 库的依赖而无法打开。也许这已经解决了,但仍然存在问题。写这篇博​​文的那个人看起来像是从 AppBundler 分叉出来的。也许你可以试一试......
  • 我试过了,还是不能正常运行。看起来叉子是为完全崩溃的问题而制造的,但这不是我遇到的问题。它运行,只是不正确。
猜你喜欢
  • 2012-07-27
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-12
相关资源
最近更新 更多