Java JOptionPane图标在Windows 10中被裁剪

Java JOptionPane图标在Windows 10中被裁剪,java,swing,windows-10,look-and-feel,Java,Swing,Windows 10,Look And Feel,我使用以下代码在Java Swing中显示一个错误对话框: JOptionPane.showMessageDialog(null, "Arquivo de imagem não encontrado. Por gentileza, altere o caminho do arquivo.", "Erro", JOptionPane.ERROR_MESSAGE); 使用Windows 10默认外观: UIManager.setLookAndFeel(UIManager.getSystemLoo

我使用以下代码在Java Swing中显示一个错误对话框:

JOptionPane.showMessageDialog(null, "Arquivo de imagem não encontrado. Por gentileza, altere o caminho do arquivo.", "Erro",  JOptionPane.ERROR_MESSAGE);
使用Windows 10默认外观:

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
但图标看起来被裁剪了,如下所示:

有没有办法解决这个问题

以下是SSCCE:

import javax.swing.JOptionPane;
import javax.swing.UIManager;

public class SSCCE {
    public static void main(String[] args) {
        try {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            JOptionPane.showMessageDialog(null, "Error message", "Error",  JOptionPane.ERROR_MESSAGE);
        } catch (Exception e){
            e.printStackTrace();
        }
    }

}

看起来甲骨文终于注意到了这一点,但目前,对于那些不愿意提供自定义图标的用户,这里有一个qiuck、hacky和依赖Windows的解决方案

在调用
UIManager.setLookAndFeel()后插入此代码。

为什么会这样 在Windows上,提供给应用程序的图标已按当前DPI设置进行缩放(96=不缩放,120=+25%,144=+50%)。 不幸的是,Java总是假定图标的大小为16x16或32x32,事实并非如此。 上面的代码使用Java用于获取操作系统图标的本机方法
sun.awt.shell.Win32ShellFolder2.getIconBits()
,但提供了适当的大小。
这种方法将来可能无法使用,因为
Win32ShellFolder2
不是API的一部分,可能会被完全修改或删除,但到目前为止,这是唯一保留本机图标的方法。

mkJ720的答案很好,但图标ID已关闭。以下是更正的:

String[][] icons = {
    {"OptionPane.warningIcon",     "65581"},
    {"OptionPane.questionIcon",    "65583"},
    {"OptionPane.errorIcon",       "65585"},
    {"OptionPane.informationIcon", "65587"}
};

张贴演示问题的帖子,以便使用Windows 10的其他人可以验证问题是否存在。所有GUI创建和更新都应在EDT上。这里的问题似乎相同:当然,似乎是相同的问题。我尝试了安装,但图标小得多,不正确。这是一个带有警告图标的JOptionPane。如果有人仍在寻找此问题的解决方案,这组图标ID在我的机器上似乎是正确的,但对于完全相同的消息,测试仪的机器上的图标是不同的。我的是迷你台式机,她的是笔记本电脑,都是windows10,系统更新完全由IT部门控制。不知道如何获得每个图标的数字,例如“65581”、“65583”等。在几台笔记本电脑上试用;在某些笔记本电脑上,错误消息有一个红色的X图标,确认消息有一个蓝色的?偶像在其他笔记本电脑上,错误消息显示为蓝色?图标,并且确认消息具有黄色!偶像在不同的机器上有不同的结果!
String[][] icons = {
    {"OptionPane.warningIcon",     "65581"},
    {"OptionPane.questionIcon",    "65583"},
    {"OptionPane.errorIcon",       "65585"},
    {"OptionPane.informationIcon", "65587"}
};