Cette entrée explique comment gérer l'entrée caractère par caractère lors de l'écriture d'un programme qui s'exécute sur l'entrée / sortie de la console en Java.
En Java, il existe des flux qui gèrent les E / S standard, mais vous pouvez "lire" les entrées caractère par caractère, mais vous ne pouvez pas gérer directement les événements de frappe.
Pour cette raison, par exemple, lors de la création d'un programme "calculatrice", si vous appuyez sur "+", quelque chose sera fait immédiatement, ce qui ne peut être réalisé avec la bibliothèque standard seule.
JLine3 est une bibliothèque qui peut être utilisée lors du développement d'applications CUI. Il est également utilisé dans certains OSS bien connus.
JLine3 prend également en charge le contrôle de terminal spécifique à la plate-forme dans un environnement Windows. Puisqu'une bibliothèque native de plate-forme est nécessaire ici, une méthode utilisant JNA ou JANSI est fournie. Cette entrée utilise JNA.
Si vous utilisez le code ci-dessous, vous pouvez saisir chaque caractère depuis le terminal et l'afficher immédiatement dans la sortie standard.
package com.hrkt.commandlinecalculator;
import lombok.extern.slf4j.Slf4j;
import org.jline.terminal.Terminal;
import org.jline.terminal.TerminalBuilder;
import org.springframework.stereotype.Component;
import java.io.IOException;
@Component
@Slf4j
public class CommandlineInterface {
public void run(String... args) {
log.info("hello");
try(Terminal terminal = TerminalBuilder.terminal()) {
int ch = 0;
while ((ch = terminal.reader().read()) != 0x09){
// TAB(0x09)Quitter avec
char c = (char)ch;
System.out.println(String.format("%d, %c", ch, ch));
}
} catch(IOException e) {
log.error(e.getMessage(), e);
}
}
}
Le mouvement est comme illustré dans la figure ci-dessous.
Cette entrée vous a montré comment gérer les frappes à partir de la console en Java. Je vois des articles qui utilisent JLine2, mais il a été développé et il est recommandé d'utiliser JLine3.
Un exemple de travail peut être trouvé ci-dessous.
https://github.com/hrkt/commandline-calculator/releases/tag/0.0.2
Recommended Posts