2017-05-05 7 views
0

J'utilise le code suivant que j'ai trouvé (How can I use Drag-and-Drop in Swing to get file path? de Abika) pour faire glisser-déposer:@SuppressWarnings (« sans contrôle ») ne fonctionne pas avec le glisser-déposer

final class FileDropHandler extends TransferHandler { 
    @Override 
    public boolean canImport(TransferHandler.TransferSupport support) { 
     for (DataFlavor flavor : support.getDataFlavors()) { 
      if (flavor.isFlavorJavaFileListType()) { 
       return true; 
      } 
     } 
     return false; 
    } 

    @Override 
    @SuppressWarnings("unchecked") 
    public boolean importData(TransferHandler.TransferSupport support) { 
     if (!this.canImport(support)) 
      return false; 

     List<File> files; 
     try { 
      files = (List<File>) support.getTransferable() 
        .getTransferData(DataFlavor.javaFileListFlavor); 
     } catch (UnsupportedFlavorException | IOException ex) { 
      // should never happen (or JDK is buggy) 
      return false; 
     } 

     for (File file: files) { 
      // do something... 
     } 
     return true; 
    } 
} 

Le gestionnaire est ensuite ajouté à un composant.

Mais le problème est que, malgré les « @SuppressWarnings (» sans contrôle «) », je reçois une erreur:

The type List is not generic; it cannot be parameterized with arguments < File>

Quelqu'un peut-il me dire quel est le problème ici? Cela semble si simple. Merci

+2

Impossible de reproduire. Peut-être que vous avez une autre classe appelée List? – assylias

+1

s'il vous plaît ajouter vos importations. Je suppose que la classe 'List' que vous avez ne vient pas de' java.util' – QBrute

Répondre

1

La méthode getTransferData est censé revenir un java.util.List dans ce cas mais vous importez java.awt.List, que ce soit comme une déclaration d'importation unique de type à savoir import java.awt.List; ou comme une déclaration d'importation sur demande à savoir import java.awt.*;. Si vous avez le premier, vous devez le changer en java.util.List et si vous avez ce dernier, vous devez importer toutes les classes de java.awt en tant qu'importation de type unique, ou utiliser un nom de type List qualifié dans la méthode importData, comme java.util.List<File> .

+1

Cela fonctionne très bien! J'aurais pu enregistrer les 3 dernières heures. Merci! – njun

0

La suppression de l'avertissement "non coché" ne fonctionne que sur les types génériques qui subissent des opérations non contrôlées, comme une distribution générique. Il ne supprime pas une erreur pure et simple, comme mettre un argument générique sur un type non générique. Vous avez ajouté un paramètre générique à un type non générique List. C'est une erreur qui ne peut pas être supprimée.