Come controllare le console multiple da codice Java?

1

Ho un'applicazione Java. Cerco di realizzare chat con multiplayer      TCP protocollo, ma ho un problema. Non riesco a visualizzare tutti i messaggi che ottengo sul livello client (il livello del server funziona perfettamente) , perché fornisco un input all'utente e creo un thread per leggere i messaggi dal client TCP , quindi

<Scanner object>.nextLine();

Sta bloccando un'uscita della mia app. Posso creare con Swing , ma non l'ho ancora compreso appieno.

Ho due opzioni:

  1. Emette tutti i nuovi messaggi dalla coda dopo aver inviato un messaggio per utente.
  2. In qualche modo scollega input e output.

Penso che non sia necessario spiegare che nella prima opzione se l'utente uscirà per un lungo periodo, dovrà inviare un messaggio prima di ricevere tutti questi nuovi messaggi.

Rimane solo la seconda opzione. Ho bisogno di detach input e output e ho scoperto che in alcuni "task interattivi" ci sono due console - prima usate per input , altre - per output . Ma posso farlo in un Java? E se posso, come?

    
posta Bulat Yunusov 19.12.2018 - 20:01
fonte

1 risposta

0

Se utilizzi Swing, puoi eseguire il tradizionale layout di "chat" a due controlli: ┌────────────┐ │output │ │output │ │output │ │... │ └────────────┘ ┌────────────┐ │input> _ │ └────────────┘

Invia un thread per l'output nell'area in alto, un altro thread per ascolta i cambiamenti nella parte inferiore. Puoi anche inviare i contenuti dell'area inferiore all'area superiore, se desideri un registro unificato. Avrai bisogno del buffering a livello di linea, però, come hanno i terminali tradizionali; Lo hanno per una ragione. Senza di esso, le parti delle linee si mescolerebbero.

Se vuoi Linux / macOS / altra console posix, usa un po 'di wrapper attorno a curses per riprodurre il layout come sopra, e non leggere stdin direttamente.

(Se hai bisogno della console di Windows, non ho idea di cosa usare.)

    
risposta data 20.12.2018 - 04:34
fonte

Leggi altre domande sui tag