Drag & Drop на Java без UI
от DominaN
В этом коде представлен не стандартный D&D, который обеспечивается Java UI, а тот его вид, что может быть полезен для различных утилит (вроде того же PNG Optimizer и схожих. Я использую его для компилятора моделей в своем новом проекте). Итак, код будет состоять из двух частей. Так как D&D это функция, предоставляемая системой, мы не можем напрямую перетягивать файл на JAR архив с приложением. Из этой ситуации есть несколько выходов, я рассмотрю самый простой.
Часть I. BAT-файл
Назовем его, например по имени приложения. Содержание довольно тривиально, но функционально. Вот он:
Итак. В начале нам необходимо перейти из директории перетянутого файла в каталог с нашим приложением. Это делает команда pushd. Затем мы запускаем JVM в тихом режиме без консоли, стартует наше приложение и ему передается аргумент запуска в виде пути к нашему перетянутому drag&drop'ом файлу. Далее переходим к Java-коду
Часть II. Java-frontend
Собственно эта часть также довольно тривиальна. Все, что нам нужно - это воспользоваться полученным аргументом запуска:
Таким образом мы сразу же начинаем работу с файлом так, как если бы задавали путь к нему вручную.
Часть I. BAT-файл
Назовем его, например по имени приложения. Содержание довольно тривиально, но функционально. Вот он:
- pushd "%~dp0"
- start /B javaw -jar myapp.jar %1
Итак. В начале нам необходимо перейти из директории перетянутого файла в каталог с нашим приложением. Это делает команда pushd. Затем мы запускаем JVM в тихом режиме без консоли, стартует наше приложение и ему передается аргумент запуска в виде пути к нашему перетянутому drag&drop'ом файлу. Далее переходим к Java-коду
Часть II. Java-frontend
Собственно эта часть также довольно тривиальна. Все, что нам нужно - это воспользоваться полученным аргументом запуска:
- import java.io.File;
- public class Main {
- public static void main(String[] args) {
- if (args[0] == null) System.exit(0);
- process_dnd(args[0]);
- }
- private static void process_dnd(final String path) {
- File dnd_file = new File(path);
- String file_path = dnd_file.getAbsoluteFile().getParentFile().getAbsolutePath().concat("/");
- String file_ext = getExtension(dnd_file);
- }
- private static String getExtension(File file) {
- String name = file.getName();
- try {
- return name.substring(name.lastIndexOf(".") + 1);
- } catch (Exception e) {
- return "";
- }
- }
- }
Таким образом мы сразу же начинаем работу с файлом так, как если бы задавали путь к нему вручную.