Есть приложение написанная на javafx нужно ей передать путь к файлу. Например нажав "открыть с помощью.." там выбрать программу, после этого запускается приложение и открывает файл, а если запущено то просто открывает. Как можно это проделать на java?
Сделать батник, который запустит приложение с нужным параметром и сопоставить его с расширением файла (Открыть с помощью - Другие программы - выбрать батник и убрать галку с полной ассоциации, тогда батник будет в списке Открыть с помощью, но по двойному клику открываться не будет). С этим проблем нет.
Но вот с задачей, когда нужно передать файл уже работающей программе, всё немного хитрее. Во-первых, нужно запретить создание второго экземпляра приложения. Это можно сделать, пробежавшись по процессам (в Java 9 особенно легко с Process API), либо просто создав где-нибудь в папке настроек приложения файл (AppData/Local/YourApp/.run), который будет говорить новому экземпляру, что уже есть такой процесс, а значит новый нужно закрыть. По завершению основной программы файл, разумеется, удалить.
Для передачи пути к файлу никакого стандартного способа нет, но предлагаю воспользоваться NIO2, там есть file system watcher, который отслеживает события в указанной папке (создание файла, удаление файла и т.д). Как только появляется файл, скажем AppData/Local/YourApp/.toopen, то приложение его открывает, вычитывает оттуда путь и открывает файл. Сам .toopen, естественно, удаляет. Есть ещё способы межпроцессного общения, но они совсем не про батники.
Вышеописанный способ не кросс-платформенный, Open With на линуксе подчиняется другим правилам, но сделать тоже реально.
И всё-таки, советую не придумывать извращенные способы открытия файла, а просто реализовать Drag'n'Drop. Уж в JavaFX это сделать легко.