gpt4 book ai didi

java - 在没有其他 Swing 组件的情况下使用 FileSystemView 的 InterruptedException

转载 作者:行者123 更新时间:2023-11-30 10:58:11 25 4
gpt4 key购买 nike

我在尝试摆脱 Java 程序完成时显示的这个讨厌的异常时感到很沮丧:

Exception while removing reference: java.lang.InterruptedException java.lang.InterruptedException at java.lang.Object.wait(Native Method) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at java.lang.ref.ReferenceQueue.remove(Unknown Source) at sun.java2d.Disposer.run(Unknown Source) at java.lang.Thread.run(Unknown Source)

我的问题的根源是使用 FileSystemView类(class)。我的代码改编自 code on this page ,使用 File.listRoots() 然后使用 FileSystemView 来显示我的 Windows 驱动器的友好名称/描述。代码的简化版本运行良好,但让守护线程运行导致问题,是这样的:

File[] roots = File.listRoots();
FileSystemView fsv = FileSystemView.getFileSystemView();
for (File f : roots) {
System.out.format("%s (%s) %d/%d%n", fsv.getSystemDisplayName(f), fsv.getSystemTypeDescription(f),
f.getUsableSpace(), f.getTotalSpace());
}

使用 FileSystemView 似乎会启动一些导致问题的守护线程(Java2D Disposer、AWT-Windows、Swing-shell 等)。

单独运行该代码似乎工作正常。使用 JNA 与更多 Windows 资源关联运行它会导致问题更频繁地发生。可以通过执行测试类 here 找到问题代码的完整示例。 , 在 Windows 上。

我四处寻找答案,并获得了可以尝试的提示,但(目前)似乎没有任何效果。作为引用,我查看了以下两个主题,它们描述了我的症状但没有提供有用的结果:

上面的第一个链接讨论了守护线程与非守护线程。我已经确认,发生此问题时到达程序末尾的“主”线程是唯一正在运行的非守护线程。上面的两个线程和许多其他来源都将处理其他 swing 组件作为解决方案,但我使用的唯一“swing”代码是 FileSystemView,我没有看到任何处理它的选项。

问题:

  • 有没有办法很好地关闭在使用 FileSystemView 时启动的守护线程?
  • 有没有一种方法可以轻松地将我的 FileSystemView 对象“包装”在一个容器中(从不向用户显示),然后我可以轻松地对其进行 dispose(),从而可能回答上一个问题?
  • 是否有 FileSystemView 的替代方案,它提供了对 Windows 驱动器名称和卷名称(例如,A:(软盘驱动器)、D:(CD-Rom)等)的丰富描述,从而避免启动看起来像导致这些问题?

最佳答案

我怀疑与 FileSystemView 相关的事情需要在 Even Dispatch Thread 上执行代码 - 该线程用于富客户端桌面应用程序中的事件调度和处理。

参见 Concurrency in Swing了解更多详情。

关于java - 在没有其他 Swing 组件的情况下使用 FileSystemView 的 InterruptedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32367929/

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