Creare un menu console in Kotlin con JLine

Mattepuffo's logo
Creare un menu console in Kotlin con JLine

Creare un menu console in Kotlin con JLine

JLine è una libreria per Java per la creazione di un menu console.

Ha diverse opzioni e non è difficile da usare.

In questo articolo vediamo un esempio basico.

Se usate Maven potete installarla aggiungendo questa dipendenza:

<dependency>
  <groupId>org.jline</groupId>
  <artifactId>jline</artifactId>
  <version>3.3.1</version>
</dependency>

Qui sotto un pò di codice:

package com.test

import org.jline.reader.*;
import org.jline.reader.impl.DefaultParser;
import org.jline.reader.impl.completer.StringsCompleter;
import org.jline.reader.impl.history.DefaultHistory;
import org.jline.terminal.TerminalBuilder;

import java.io.IOException;

fun main() {
  try {
    TerminalBuilder.builder().system(true).build().use { terminal ->
      val completer: Completer = StringsCompleter("help", "hello", "exit")
      val reader: LineReader = LineReaderBuilder.builder()
        .terminal(terminal)
        .parser(DefaultParser())
        .completer(completer)
        .history(DefaultHistory())
        .build()

      terminal.writer().println("Test di JLine!")
      terminal.writer().println("Scrivi 'help' per visualizzare i comandi disponibili.")
      terminal.writer().println("")
      while (true) {
        var line: String?
        try {
          line = reader.readLine("Scrivi comando> ")
        } catch (e: UserInterruptException) {
          break
        } catch (e: EndOfFileException) {
          break
        }

        if (line == null) {
          continue
        }

        line = line.trim { it <= ' ' }

        when (line) {
          "help" -> terminal.writer().println("Comandi: help, print, exit")
          "print" -> terminal.writer().println("Ciao da JLine!")
          "exit" -> {
            terminal.writer().println("Uscita...")
            return
          }

          else -> terminal.writer().println("Comando inesistente: " + line)
        }

        terminal.flush()
      }
    }
  } catch (e: IOException) {
    println(e.message)
  }
}

Enjoy!


Condividi

Commentami!