2010-09-03 4 views
4

J'écris une application console en Java. Il est similaire à un client de chat: Les entrées et les sorties sont effectuées de manière asynchrone. Le problème est que si une sortie est faite pendant que l'utilisateur est en train de taper, les lignes seront mélangées à l'écran.Conserver les entrées/sorties séparées dans l'application de la console Java

Je cherche une solution qui me permette d'avoir une zone d'entrée séparée de la zone de sortie. En ce moment j'utilise un thread supplémentaire qui interroge un BufferedReader sur System.in.

Le programme doit être exécuté sur un serveur Linux et accessible via une session SSH. Donc, tous les conseils qui ne fonctionnent que dans cet environnement sont bien.

Y a-t-il des bibliothèques de haut niveau capables de faire cela? Ou y a-t-il une astuce intelligente utilisant les codes terminaux/ANSI? Les codes ANSI s (save cursor) et r (restore cursor) peuvent être utiles mais comment savoir où sauter pour faire la sortie et comment gérer le défilement?

Répondre

2

Je me souviens depuis longtemps de travailler avec des choses similaires mais en C++. J'utilisais alors la bibliothèque ncurses. Découvrez javacurses qui semble être une implémentation Java de quelque chose comme ncurses.

+0

bien que j'aime la bibliothèque en raison de la nostalgie. il a sa poussée. mais c'est une bibliothèque de widgets complète. vous pouvez prendre n'importe quelle bibliothèque de widgets (par exemple AWT, SWT) et créer deux zones de texte à cet effet. S'il n'y a pas de petit extrait sur la façon de séparer in et out, je ne vois pas l'intérêt d'utiliser jcurses – benez

+1

@kewlbfy OP avait besoin d'une solution qui fonctionne dans un terminal. Les bibliothèques de widgets que vous mentionnez ne fonctionnent pas dans ce contexte. –

1

Semble que vous devez utiliser des malédictions. JCurses est une implémentation Java de la bibliothèque Curses et vous donnera le contrôle du terminal pour permettre le défilement, le positionnement, etc.

Questions connexes