OSDN Git Service

OSXのファイルのドロップ処理時のURI判定の修正
authorseraphy <seraphy@users.osdn.me>
Wed, 16 Jan 2019 23:40:26 +0000 (08:40 +0900)
committerseraphy <seraphy@users.osdn.me>
Wed, 16 Jan 2019 23:40:26 +0000 (08:40 +0900)
src/main/java/charactermanaj/ui/util/FileDropTarget.java

index 9788be6..834a748 100644 (file)
@@ -26,25 +26,25 @@ public class FileDropTarget extends DropTargetAdapter {
         * ロガー
         */
        private final Logger logger = Logger.getLogger(getClass().getName());
-       
+
        protected FileDropListener fileDropListener;
 
        public FileDropTarget() {
                this(null);
        }
-       
+
        public FileDropTarget(FileDropListener fileDropListener) {
                this.fileDropListener = fileDropListener;
        }
-       
+
        public FileDropListener getFileDropListener() {
                return fileDropListener;
        }
-       
+
        public void setFileDropListener(FileDropListener fileDropListener) {
                this.fileDropListener = fileDropListener;
        }
-       
+
        protected void onDropFiles(List<File> dropFiles) {
                if (fileDropListener != null) {
                        if ( !dropFiles.isEmpty()) {
@@ -52,7 +52,7 @@ public class FileDropTarget extends DropTargetAdapter {
                        }
                }
        }
-       
+
        public void drop(DropTargetDropEvent dtde) {
                try {
                        // urlListFlavor (RFC 2483 for the text/uri-list format)
@@ -68,7 +68,7 @@ public class FileDropTarget extends DropTargetAdapter {
                        // ドロップされたものが1つのファイルであれば受け入れる。
                        for (DataFlavor flavor : dtde.getCurrentDataFlavors()) {
                                logger.log(Level.FINE, "flavor: " + flavor);
-                               
+
                                if (DataFlavor.javaFileListFlavor.equals(flavor)) {
                                        dtde.acceptDrop(DnDConstants.ACTION_COPY);
                                        @SuppressWarnings({ "unchecked", "rawtypes" })
@@ -88,18 +88,25 @@ public class FileDropTarget extends DropTargetAdapter {
                                                        continue;
                                                }
                                                try {
-                                                       URI uri = new URI(fileStr);
-                                                       File dropFile = new File(uri);
+                                                       File dropFile;
+                                                       if (fileStr.startsWith("/")) {
+                                                               // protocolがなく、ルートから始まる場合はファイルと仮定する
+                                                               dropFile = new File(fileStr);
+                                                       } else {
+                                                               URI uri = new URI(fileStr);
+                                                               dropFile = new File(uri);
+                                                       }
                                                        dropFiles.add(dropFile);
                                                        break;
-                                                       
+                                               } catch (RuntimeException ex) {
+                                                       logger.log(Level.WARNING, "invalid drop file: " + fileStr, ex);
                                                } catch (URISyntaxException ex) {
                                                        logger.log(Level.WARNING, "invalid drop file: " + fileStr, ex);
                                                }
                                        }
                                }
                        }
-                       
+
                        // 存在しないファイルを除去する.
                        for (Iterator<File> ite = dropFiles.iterator(); ite.hasNext();) {
                                File dropFile = ite.next();
@@ -110,7 +117,7 @@ public class FileDropTarget extends DropTargetAdapter {
 
                        // ドロップされたファイルを通知する.
                        onDropFiles(dropFiles);
-                       
+
                } catch (UnsupportedFlavorException ex) {
                        logger.log(Level.WARNING, "unsipported flovaor." , ex);
                        onException(ex);
@@ -120,7 +127,7 @@ public class FileDropTarget extends DropTargetAdapter {
                        onException(ex);
                }
        }
-       
+
        protected void onException(Exception ex) {
                // do nothing.
        }