Реклама

 
1 голос
 
324 просмотра
3.09.2017 / 21:18  Aladdin

Как открыть файл запущенным приложением

Есть приложение написанная на javafx нужно ей передать путь к файлу.
Например нажав "открыть с помощью.." там выбрать программу, после этого запускается приложение и открывает файл, а если запущено то просто открывает.
Как можно это проделать на java?
Ответы
 
0 голосов
 
# 4.09.2017 / 00:18  aNNiMON
Сделать батник, который запустит приложение с нужным параметром и сопоставить его с расширением файла (Открыть с помощью - Другие программы - выбрать батник и убрать галку с полной ассоциации, тогда батник будет в списке Открыть с помощью, но по двойному клику открываться не будет).
С этим проблем нет.

Но вот с задачей, когда нужно передать файл уже работающей программе, всё немного хитрее.
Во-первых, нужно запретить создание второго экземпляра приложения. Это можно сделать, пробежавшись по процессам (в Java 9 особенно легко с Process API), либо просто создав где-нибудь в папке настроек приложения файл (AppData/Local/YourApp/.run), который будет говорить новому экземпляру, что уже есть такой процесс, а значит новый нужно закрыть.
По завершению основной программы файл, разумеется, удалить.

Для передачи пути к файлу никакого стандартного способа нет, но предлагаю воспользоваться NIO2, там есть file system watcher, который отслеживает события в указанной папке (создание файла, удаление файла и т.д). Как только появляется файл, скажем AppData/Local/YourApp/.toopen, то приложение его открывает, вычитывает оттуда путь и открывает файл. Сам .toopen, естественно, удаляет.
Есть ещё способы межпроцессного общения, но они совсем не про батники.

Вышеописанный способ не кросс-платформенный, Open With на линуксе подчиняется другим правилам, но сделать тоже реально.

И всё-таки, советую не придумывать извращенные способы открытия файла, а просто реализовать Drag'n'Drop. Уж в JavaFX это сделать легко.
Изм. aNNiMON от 4.09.2017 / 07:45
Всего: 1

Мы в соцсетях

vk tw tg yt

Пожертвования

Аноним2850 р.
Freddy1700 р.
riseremi1111 р.
NaruTrey800 р.
vlavolk637 р.
  © aNNiMON (Melnik Software)