Java IPC: графический интерфейс и командная строка
Вопрос
Я хотел бы реализовать интерфейс командной строки для приложения Java. Это не было бы слишком сложно сделать, за исключением того, что я хотел бы, чтобы программа командной строки влияла на состояние другой программы Java GUI. Так, например, я мог бы ввести:
java CliMain arg1 arg2
А другой запущенный экземпляр графического интерфейса будет выполнять соответствующее действие.
Как проще всего реализовать что-то подобное?
Решение
Приложение GUI может прослушивать порт TCP (через интерфейс localhost
), и приложение CLI может подключиться к нему.
Один из способов сделать это - использовать REST поверх HTTP.
Другие советы
Другой способ - через JMX. Это дает вам много вещей "бесплатно" (в простом случае вы просто реализуете бин и регистрируете его - очень просто), и он особенно хорошо подходит для этой задачи.
вы можете прослушивать приложение с графическим интерфейсом (например, редактор)
1) событие буфера обмена определенного типа
если событие относится к интересующему вас типу, получите содержимое буфера обмена.
2) сокет сервера на определенном порту
слушать на сокете сервера. при запуске программы CLI она подключается к сокету сервера через известный порт, отправляет информацию и завершает работу.
3) очередь
Вы можете включить из программы CLI и удалить из программы GUI.
если вы хотите продолжить исследование, многие профессиональные редакторы, такие как emacs, используют один и тот же механизм. http://www.emacswiki.org/emacs/EmacsClient
Вашим приложением можно управлять с помощью RMI . Приложение будет реализовывать интерфейс управления, зарегистрировать свой сервис на localhost, а приложение командной строки получит прокси-сервер rmi и вызовет нужные методы управления ...
Поначалу это кажется сложным, но когда вы попробуете, вы быстро увидите, насколько это просто. Кроме того, он поддерживает шифрование с помощью SSL . Таким образом, вы можете обезопасить обмен данными, если в сети были данные, относящиеся к безопасности.
Самый простой способ - для GUI прослушивать команды через порт TCP. Командная строка будет отправлять команды, а графический интерфейс будет интерпретировать их. Р>
Возможно, вы могли бы сделать это и с именованными каналами, но я не уверен, как бы вы реализовали это в Java.