代码之家  ›  专栏  ›  技术社区  ›  Daniel Ryan

如何防止ShellFolder.getFolderColumns(…)大量崩溃

  •  0
  • Daniel Ryan  · 技术社区  · 14 年前

    我在Java中使用秘密隐藏的ShellFolder类。它有一个很好的方法getFolderColumns,让您可以访问一些关于文件的好数据。

    问题是,许多文件会使其崩溃:

    线程中的异常 “池-1-线程-2445” java.lang.InternalError:无法 绑定C:\ Windows\System32\zonedon.reg 家长 sun.awt.shell.Win32ShellFolder2$4.call(Win32ShellFolder2.java:400) 在 sun.awt.shell.Win32ShellFolder2$4.call(Win32ShellFolder2.java:385) 在 sun.awt.shell.Win32ShellFolderManager2$ComInvoker.invoke(Win32ShellFolderManager2.java:523) 在 sun.awt.shell.ShellFolder.invoke(ShellFolder.java:399) 在 sun.awt.shell.ShellFolder.invoke(ShellFolder.java:385) 在 sun.awt.shell.Win32ShellFolder2.getIShellFolder(Win32ShellFolder2.java:384) 在 sun.awt.shell.Win32ShellFolder2$17.call(Win32ShellFolder2.java:1068) 在 sun.awt.shell.Win32ShellFolder2$17.call(Win32ShellFolder2.java:1066) 在 java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 在 java.util.concurrent.FutureTask.run(FutureTask.java:138) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 sun.awt.shell.Win32ShellFolderManager2$ComInvoker$3.run(Win32ShellFolderManager2.java:492) 在 运行(Thread.java:619)

    你也无法捕捉到这个并继续,因为它抛出了一个未捕获的异常。 我注意到JFileChooser也使用这种方法,但我似乎找不到它对此类崩溃的预防/保护。

    1 回复  |  直到 14 年前
        1
  •  0
  •   Daniel Ryan    13 年前

    getFolderColumns方法仅适用于文件夹。所以缓存列信息(这样您就知道列的位置)仍然可以从文件中获取所需的列数据。我还没有见过文件夹中的列与文件不同的情况。

    哦,只是要注意,这种方法只适用于windows。