アプリケーションに、エクスプローラなどから、ファイルをドロップする場合、Windowsとubuntu(Linux)では、処理が異なります。
new DropTarget(mainPanel, new MyDropTargetAdapter());
...
private class MyDropTargetAdapter extends DropTargetAdapter {
public void drop(DropTargetDropEvent e) {
try {
Transferable transfer = e.getTransferable();
if (transfer.isDataFlavorSupported(DataFlavor.javaFileListFlavor)) {
// Windows
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
java.util.List fileList =
(java.util.List) (transfer.getTransferData(DataFlavor.javaFileListFlavor));
if (fileList.size() > 0) {
File currentFile = (File) fileList.get(0);
if (currentFile.isFile()) {
....
}
}
}else if(transfer.isDataFlavorSupported(DataFlavor.stringFlavor)){
// Linux
if(e.isLocalTransfer() ){
}else{
e.acceptDrop(DnDConstants.ACTION_COPY_OR_MOVE);
String str = (String) transfer.getTransferData(DataFlavor.stringFlavor);
String lineSep = System.getProperty("line.separator");
String[] fileList = str.split(lineSep);
if(fileList.length > 0){
URI fileURI = new URI(fileList[0].replaceAll("[\r\n]", ""));
File currentFile = new File(fileURI);
if (currentFile.isFile()) {
...
}
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
Windowsでは、ファイルリストとして渡されますが、ubuntuでは、文字列として渡されます。