我有这种方法只能在Windows上运行,并且使用来自sun.awt.shell的类,但应用程序可以在非Windows系统上运行,并且在Java上它可以与OpenSdk一起使用,我怀疑这不包括sun.awt.shell类。如何在某些系统上不存在引用类的情况下编写java类
我已经从类中删除了sun.awt.shell
导入语句,因此类名只能在此方法中引用,并且我可以保证此方法永远不会在非Windows计算机上运行。
但是,这是足够的,否则类将无法加载系统丢失这些类,我是否需要重写方法来使用反射?
public static boolean isRemote(String newPath)
{
try
{
Path root = Paths.get(newPath).getRoot();
sun.awt.shell.ShellFolder shellFolder = sun.awt.shell.ShellFolder.getShellFolder(root.toFile());
sun.awt.shell.ShellFolderColumnInfo[] cols = shellFolder.getFolderColumns();
for (int i = 0; i < cols.length; i++)
{
if (cols[i].getTitle().equals(WINDOWS_SHELL_SIZE)
&& ((String) shellFolder.getFolderColumnValue(i)).startsWith("Network Drive"))
{
return true;
}
else if (cols[i].getTitle().equals(WINDOWS_SHELL_ATTRIBUTES)
&& ((String) shellFolder.getFolderColumnValue(i)).startsWith("\\"))
{
return true;
}
}
}
catch (Exception ex)
{
MainWindow.logger.log(Level.SEVERE, ex.getMessage(), ex);
return false;
}
return false;
}
为什么接近,特别是没有理由! –
“请问班级是否无法加载缺少这些班级的系统?”嗯,是。事实上,你的班级不会无法加载。失败的方法是调用'isRemote'。如果包'sun.awt.shell'中的类在运行时不存在,您将得到一个'NoClassDefFoundError'。这与'import'语句无关,这是一个仅编译时的特性。 – Seelenvirtuose
您可以检查,例如'Class.forName(“sun.awt.shell.ShellFolder”)'并在使用它之前监视'ClassNotFoundException'? – c0der