Domanda

Vorrei implementare un'interfaccia a riga di comando per un'applicazione Java. Questo non sarebbe troppo difficile da fare, tranne per il fatto che vorrei che il programma da riga di comando influenzasse lo stato di un altro programma della GUI Java. Quindi, ad esempio, potrei digitare:

java CliMain arg1 arg2

E un'altra istanza della GUI in esecuzione eseguirà un'azione appropriata.

Qual è il modo più semplice per implementare qualcosa del genere?

È stato utile?

Soluzione

Potresti avere l'applicazione GUI in ascolto su una porta TCP (sull'interfaccia localhost ) e l'applicazione CLI si connetterà ad essa.

Un modo per farlo sarebbe usare REST su HTTP.

Altri suggerimenti

Un altro modo è tramite JMX. Ti dà un sacco di roba " gratuitamente " (nel caso semplice basta implementare un bean e registrarlo - molto semplice), ed è particolarmente adatto a questo compito.

puoi avere l'applicazione GUI (come un editor) in ascolto su

1) evento negli Appunti di un certo tipo
   se l'evento è di un tipo che ti interessa, procurati il ??contenuto degli appunti.

2) socket del server su una determinata porta
   ascoltare su un socket del server. quando viene avviato il programma CLI, si collega al socket del server in una porta nota, invia informazioni ed esce.

3) coda
   è possibile accedere al programma CLI e rimuovere il programma dalla GUI.

se vuoi approfondire, molti editor professionisti come emacs usano lo stesso meccanismo. http://www.emacswiki.org/emacs/EmacsClient

La tua applicazione potrebbe essere controllata tramite RMI . L'applicazione implementerebbe un'interfaccia di controllo, registrerebbe il suo servizio su localhost e l'applicazione da riga di comando otterrebbe un proxy rmi e chiamerebbe i metodi di controllo desiderati ...

All'inizio sembra difficile, ma quando avrai provato vedrai rapidamente quanto sia facile. Supporta inoltre la crittografia tramite SSL . In questo modo potresti proteggere lo scambio di dati se esistessero dati rilevanti per la sicurezza online.

Il modo più semplice sarebbe che la GUI ascolti i comandi su una porta TCP. La riga di comando inviava i comandi e la GUI li interpretava.

Forse potresti farlo anche con named pipe, ma non sono sicuro di come potresti implementarlo in Java.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top