[[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/