[[oktatas:programozás:java|< Java]] ====== Java Konzol ====== * **Szerző:** Sallai András * Copyright (c) Sallai András, 2014, 2019 * Licenc: GNU Free Documentation License 1.3 * Web: http://szit.hu ===== Képernyőtörlés ===== class Program02 { private static final String ANSI_CLS = "\u001b[2J"; public static void main(String[] args) { System.out.println("Első"); System.out.print(ANSI_CLS); System.out.flush(); System.out.println("Második"); } } (Linuxon Gnome terminálban nem működik a Runtime.getRuntime().exec("clear");) ===== Konzolos képernyőkezelés ===== A következő program bemutatja, hogyan kell karakteres felületen kurzort pozicionálni, képernyőt törölni és várakozni konzolon. class Program01 { public static void gotoxy(int x, int y) { char escCode = 0x1B; System.out.print(String.format("%c[%d;%df", escCode, y, x)); } public static void clear() { System.out.print("\u001b[2J"); System.out.flush(); } public static void wait(int time) { try{ Thread.sleep(time); // 1000 = 1s }catch(InterruptedException e){} } public static void main(String[] args) { gotoxy(10, 5); System.out.println("Hi"); wait(2000); clear(); System.out.println("22"); } } ===== Java jCurses ===== A jcurses nem része az JDK-nak, azt külön kell beszereznünk. A működéshez szükség lesz a következő két fájlra: * jcurses.jar * libjcurses.so Van egy libjcurses64.so fájl is. Ha ez is a jcurses.jar fájl mellett van, akkor hibásan a 64-bites állományt szeretné alapértelmezetten hívni, ezért ne legyen ott. Én az új programom könyvtárába másoltam a fenti két fájlt. import jcurses.system.CharColor; import jcurses.widgets.*; class Program01 { public static void main(String[] args) throws Exception { Window w = new Window(40, 20, true, "Helló Világ ablak"); DefaultLayoutManager mgr = new DefaultLayoutManager(); mgr.bindToContainer(w.getRootPanel()); mgr.addWidget( new Label("Helló Világ", new CharColor(CharColor.WHITE, CharColor.GREEN)), 0, 0, 40, 20, WidgetsConstants.ALIGNMENT_CENTER, WidgetsConstants.ALIGNMENT_CENTER); w.show(); Thread.currentThread().sleep(5000); // kilépés előtt 5 másodpercig várunk w.close(); // Vissza a natív konzlra } } Fordítás: javac -cp /home/joska/jcurses.jar Program01.java Futtatás: java -cp /home/joska/jcurses.jar:. Program01 * https://sourceforge.net/projects/javacurses/ (2019) * https://github.com/sunhong/jcurses (2019) * https://github.com/kba/jcurses (2019) ===== Kellékek ===== A fontosabb beállítások táblázata: ^ Kulcs ^ Jelentés ^ | "file.separator" | Fájlútvonalak szepartáorok. Unix alatt "/", Windows alatt "\". | "java.class.path" | Class fájlokat tartalmazó JAR archívok és könyvtárak keresése \\ Az elemek a platformnak megfelelő elválasztókkal vannak szeprálva, amely a path.separator változóban van megadva | | "java.home" | A Java Runtime Environment (JRE) telepítési könyvtára | | "java.vendor" | JRE terjesztő | | "java.vendor.url" | JRE terjesztő URL | | "java.version" | JRE verziószáma | | "line.separator" | Szöveges fájlokban a sorvégejel operációs rendszer szerint | | "os.arch" | Az operációs rendszer architektúrája | | "os.name" | Az operációs rendszer neve | | "os.version" | Az operációs rendszer verziószáma | | "path.separator" | Elválasztó karakter a java.class.path használata során | | "user.dir" | A használt munkakönyvtár | | "user.home" | A felhasználó saját könyvtára | | "user.name" | Felhasználónév | A tulajdonságok olvasása: System.getProperty("path.separator"); Az összes beállítás megjelenítése: System.getProperties().list(System.out); Tulajdonságok írása: import java.io.FileInputStream; import java.util.Properties; class Program01 { public static void main(String[] args) throws Exception { FileInputStream propFile = new FileInputStream( "beallitasok.txt"); Properties p = new Properties(System.getProperties()); p.load(propFile); // Rendszerbeállítások érvényesítése System.setProperties(p); // Új beállítások System.getProperties().list(System.out); } } ===== jLine ===== A jLine soros bevitel kezelésére találták ki konzolon. Mi most egy billentyű elkapására fogjuk használni. Tesztelve: XP és Linux rendszeren. import jline.ConsoleReader; import java.io.IOException; class Program01 { public static void main(String[] args) throws IOException { ConsoleReader cr = new ConsoleReader(); int kod; do { kod = cr.readVirtualKey(); System.out.printf("Kod: %d\n", kod); }while(kod!=0x1B); // Esc billentyű decimális 27, hexadecimálisan 1B } } A mellékelt make fájl: all: javac -cp .;jline-1.0.jar Program01.java Szükséges hozzá a jline-1.0.jar vagy újabb verziója. Letölthető a következő oldalról: * https://jline.github.io/ (2019) Indításhoz: java -cp .;jline-1.0.jar Program01 Indításhoz: java -cp .:jline-1.0.jar Program01 ===== Jansi ===== A jAnsi segítségével képernyőtörlés és kurzorpozicionálás megoldható: import org.fusesource.jansi.Ansi; import org.fusesource.jansi.AnsiConsole; import java.util.Scanner; class Program01 { public static void main(String args[]) { Scanner in = new Scanner(System.in); AnsiConsole.systemInstall(); Ansi ansi = new Ansi(); AnsiConsole.out().print(new Ansi().eraseScreen()); ansi.reset(); AnsiConsole.out().print(ansi); do { ansi.cursor(0, 40); AnsiConsole.out().print(ansi); AnsiConsole.out.print("Teszto"); ansi.cursor(5, 0); AnsiConsole.out().print(ansi); AnsiConsole.out.print("> "); ansi.cursor(5, 3); ansi.eraseLine(); AnsiConsole.out().print(ansi); String cmd = in.nextLine(); if(cmd.equals("vege")) break; }while(true); } } Fordításhoz Makefile all: javac -cp .;jansi-1.11.jar Program01.java java -cp .;jansi-1.11.jar Program01 java -cp .:jansi-1.11.jar Program01 A működéshez szükséges a jansi-1.11.jar vagy újabb verziójú fájl. Letölthető innen: * https://fusesource.github.io/jansi/ (2019) * https://github.com/fusesource/jansi (2019) ===== Linkek ===== * https://code.google.com/p/lanterna/ * http://code.google.com/p/java-console-api/ * http://jansi.fusesource.org * http://sourceforge.net/projects/javacurses/