Java IPC: графический интерфейс и командная строка

StackOverflow https://stackoverflow.com/questions/249027

  •  05-07-2019
  •  | 
  •  

Вопрос

Я хотел бы реализовать интерфейс командной строки для приложения 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top