我们在Windows环境下开发了一个Java应用程序(OpenJDK 17 for Windows),但最近要求确保在MacOS下一切正常。即使它是一个Java应用程序,也可能发生一些事情,它确实发生了。
当我尝试导出一个文件时,正在使用的文件转换器(BasicFileConverter)在Windows和Ubuntu Linux下工作没有问题,但在MacOS下相同的操作会导致类转换异常。
java.lang.ClassCastException:类com.apple.laf. AquaFileServerUI无法强制转换为类javax.swing.plaf.basic. BasicFileServerUI(com.apple.laf. AquaFileServerUI和javax.swing.plaf.basic. BasicFileServerUI位于加载程序“bootstrap”的模块java.desktop中)
您可能会想,为什么我不直接使用JFileExcurser呢?但不幸的是,我需要能够获得GUI并动态更新文本字段中的文件名。
为此,我有以下代码://fileName是全局变量... Utilities.invokeLater(() -> ((BasicFileChooserUI) getUI()).setFileName(fileName));
因此,您可以看到,我需要FileDataServer中的“getUI()”,这样我就可以访问“setFileName”方法。
任何简单的变通方法都足够了。我想要这样:
if (fileName != null && !fileName.isEmpty()) {
val osType = doPrivileged(getOSTypeAction());
if (osType == WINDOWS || osType == LINUX) {
invokeLater(() -> ((BasicFileChooserUI) getUI()).setFileName(fileName));
}
if (osType == MACOSX) {
invokeLater(() -> ((AquaFileChooserUI) getUI()).setFileName(fileName));
}
}
字符串
但是我不能从Windows JDK调用“AquaFileServerUI”。
有什么建议吗?
1条答案
按热度按时间rmbxnbpk1#
您可以使用反射,假设方法在所有平台上都命名为相同:
字符串