Drag & Drop на Java без UI

от
Java

В этом коде представлен не стандартный D&D, который обеспечивается Java UI, а тот его вид, что может быть полезен для различных утилит (вроде того же PNG Optimizer и схожих. Я использую его для компилятора моделей в своем новом проекте). Итак, код будет состоять из двух частей. Так как D&D это функция, предоставляемая системой, мы не можем напрямую перетягивать файл на JAR архив с приложением. Из этой ситуации есть несколько выходов, я рассмотрю самый простой.

Часть I. BAT-файл
Назовем его, например по имени приложения. Содержание довольно тривиально, но функционально. Вот он:
  1. pushd "%~dp0"
  2. start /B javaw -jar myapp.jar %1

Итак. В начале нам необходимо перейти из директории перетянутого файла в каталог с нашим приложением. Это делает команда pushd. Затем мы запускаем JVM в тихом режиме без консоли, стартует наше приложение и ему передается аргумент запуска в виде пути к нашему перетянутому drag&drop'ом файлу. Далее переходим к Java-коду

Часть II. Java-frontend
Собственно эта часть также довольно тривиальна. Все, что нам нужно - это воспользоваться полученным аргументом запуска:
  1. import java.io.File;
  2.  
  3. public class Main {
  4.  
  5.     public static void main(String[] args) {
  6.         if (args[0] == null) System.exit(0);
  7.  
  8.         process_dnd(args[0]);
  9.     }
  10.  
  11.     private static void process_dnd(final String path) {
  12.         File dnd_file = new File(path);
  13.         String file_path = dnd_file.getAbsoluteFile().getParentFile().getAbsolutePath().concat("/");
  14.         String file_ext = getExtension(dnd_file);
  15.     }
  16.  
  17.     private static String getExtension(File file) {
  18.         String name = file.getName();
  19.  
  20.         try {
  21.             return name.substring(name.lastIndexOf(".") + 1);
  22.         } catch (Exception e) {
  23.             return "";
  24.         }
  25.     }
  26. }

Таким образом мы сразу же начинаем работу с файлом так, как если бы задавали путь к нему вручную.
  • +2
  • views 4805