J'ai cette méthode qui ne fonctionne que sous Windows et utilise des classes de sun.awt.shell, cependant l'application peut fonctionner sur des systèmes non-windows, et sur Java, il peut être utilisé avec OpenSdk et je suppose que cela n'inclut pas la classe sun.awt.shell.Comment écrire une classe java si la classe de références n'existe pas sur certains systèmes
J'ai supprimé les instructions d'importation sun.awt.shell
de la classe afin que le nom de classe ne soit référencé que dans cette méthode, et je peux garantir que cette méthode ne sera jamais réellement exécutée sur une machine non-Windows.
Mais est-ce suffisant ou la classe ne parviendra-t-elle pas à se charger de toute façon sur les systèmes qui manquent ces classes, ai-je besoin de réécrire la méthode pour utiliser la réflexion?
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;
}
pourquoi fermer, surtout sans raison! –
"La classe ne parviendra-t-elle pas à charger de toute façon les systèmes qui manquent ces classes [...]?" Hé bien oui. En fait, votre classe ne manquera pas de charger. Ce qui échouera est un appel de méthode 'isRemote'. Si les classes du package 'sun.awt.shell' ne sont pas présentes lors de l'exécution, vous obtiendrez un' NoClassDefFoundError'. Cela n'a rien à voir avec l'instruction 'import' qui est une fonctionnalité de compilation uniquement. – Seelenvirtuose
Pourriez-vous vérifier, par exemple par 'Class.forName (" sun.awt.shell.ShellFolder ")' et regarder pour ClassNotFoundException' avant de l'utiliser? – c0der