dropbox-logo

Aktuelle Aktion!

5GB mehr Speicher!
Zum Artikel!

Weitere 2GB mehr!
Zum Artikel!

Edit Comment
IT-Stuff, Tutorials, Software, Internet, Unterhaltung Willkommen auf IMA

Es ist ärgerlicher denn je: tanken!Vorhin zu Hause noch ein paar neue Autoteile für den Wagen bestellt und dann mit dem Bus unterwegs gewesen. Dann aus den öffentlichen Verkehrsmitteln noch 1,609€ an der Zapfsäule gesehen und direkt ins Auto gesetzt und schon kostet es 1,679€.
Wer diesen Ärger vermeiden will informiert sich schon vor der Fahrt zur Tanke nach dem günstigsten Preis der Umgebung.
Wie?

Wie wäre es mit einem Android Tankstellen-App: GasStations!
GasStations bietet alles, was man zum stressfreien und erfolgreichen Tanken braucht.

gasstations for android tankstellen app übersicht2 180x300 GasStations für Android: super Tankstellen App for free gasstations for android tankstellen app tankstelle 180x300 GasStations für Android: super Tankstellen App for free

In einer Übersicht werden alle Tankstellen der Umgebung mitsamt Preis eines Kraftstoffes (wählbar) angezeigt. Die Daten werden live beim Öffnen der App aktualisiert und sind (bei mir bis jetzt) immer exakt. Einzelne Tankstellen kann man zu seinen Favouriten hinzufügen, sehr praktisch.
Zu jeder Tankstelle gibt es neben allen Kraftstoffpreisen auch die Adresse, Telefonnummer und Öffnungszeiten (falls bekannt).

gasstations for android tankstellen app map 180x300 GasStations für Android: super Tankstellen App for free

Zusätzlich wird die Entfernung zu jeder Tankstelle angezeigt und eine Google Map gibt es auch.

Das alles gibt es kostenlos mit ein klein wenig Werbung am unteren Rand. Ich bin sehr positiv überrascht und hoffe, dass die App in Zukunft 1. öfter runtergeladen wird (500-1000 Downloads momentan deutet auf eine neue App hin) und auch weiterentwickelt wird.

Ich würde mir zum Beispiel einen Preisalarm wünschen, der im Hintergrund in regelmäßigen Zeitabständen bestimmte Tankstellen nach einem gewünschten Preis absucht und benachrichgt, wenn dieser Preis erreicht wird.

Mein Tipp für die Autofahrer unter euch.


java windows cmd splash screen function Java #3   farbige Splash Screens in der Konsole erstellen

In meinem letzten Post habe ich die Farbgestaltung in Java etwas näher untersucht. Zusätzlich auch die Konsolensteuerung (Cursor bewegen, Konsoleninhalt manipulieren usw) getestet.
Daraus kann man ja schon eine Menge machen. Ich habe mich mal an einen “Splash Screen Generator” gemacht. Klingt natürlich viel geiler als es ist.
Ziel soll es sein einen beliebigen umrahmten Text in beliebiger Farbgestaltung an beliebiger Stelle auf dem Bildschirm für eine beliebige Zeit anzeigen zu lassen. Für den Benutzer ist das mit 1 Funktionsaufruf besonders einfach gehalten.

code Java #3   farbige Splash Screens in der Konsole erstellenCode

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

import java.io.IOException;
import java.io.*;
import org.fusesource.jansi.AnsiConsole;
import org.fusesource.jansi.*;

public class test {

  public static final String CLS = "\u001b[2J";
  public static final String TOP = "\u001b[0;1H";
  public static final String UP = "\u001b[1F";
  public static final String LEFT = "\u001b[1G";
  public static final String DEL = "\u001b[2K";
  public static final String DEL_LEFT = "\u001b[1K";
  public static final String DEL_RIGHT = "\u001b[0K";
  public static final String BOLD = "\u001b[1m";
  public static final String RESET = "\u001b[0m";
  public static final String SPLASH = "\u001b[1;37;1;44m";

	public static void buildSplashScreen(String[] splash, int time, String Style, int x, int y) throws InterruptedException {
		Ansi ansi=Ansi.ansi();

		// get longest element
		int maxlength = 0;
		for(String getmax : splash) {
			if(getmax.length() > maxlength) maxlength = getmax.length();
		}

		// old style: AnsiConsole.out.print(SPLASH+"\u001b["+x+";"+y+"H");
		AnsiConsole.out.print(SPLASH+ansi.cursor(x-1,y));
		System.console().printf("\u2554");
		for(int i = 0;i<maxlength+2;i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u2557\n");
		for(int j = 0;j < splash.length;j++) {
			AnsiConsole.out.print(ansi.cursor(x,10)); x++;
			System.console().printf("\u2551 " + splash[j] + " \u2551\n");
		}
		AnsiConsole.out.print(ansi.cursor(x,10));
		System.console().printf("\u255A");
		for(int k = 0;k<maxlength+2;k++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u255D\n");

		Thread.sleep(time);

		clearScreen();
	}

	public static void clearScreen() {
		for(int i=0;i<50;i++)
        {
            AnsiConsole.out.println( RESET + DEL);
        }
        AnsiConsole.out.print( CLS + TOP );
	}

	public static void main(String[] args) throws IOException, InterruptedException {

		try {AnsiConsole.systemInstall();}catch(Exception e){}
		Ansi ansi=Ansi.ansi();

		String[] splash = new String[9];
		splash[0] = "                                                        ";
		splash[1] = " _    _  _____            ____                          ";
		splash[2] = "| |  | |/ ____|          / _| |                         ";
		splash[3] = "| |__| | (___  ___  ___ | |_| |___      ____ _ _ __ ___ ";
		splash[4] = "|  __  |\\___ \\/ __|/ _ \\|  _| __\\ \\ /\\ / / _` | '__/ _ \\";
		splash[5] = "| |  | |____) \\__ \\ (_) | | | |_ \\ V  V / (_| | | |  __/";
		splash[6] = "|_|  |_|_____/|___/\\___/|_|  \\__| \\_/\\_/ \\__,_|_|  \\___|";
		splash[7] = "                                                        ";
		splash[8] = "                                                        ";

		buildSplashScreen(splash, 5000, SPLASH, 10, 10);

		try {System.in.read();}catch(Exception e){}
	}
}

Die Funktion buildSplashScreen wird also mit 5 Parametern aufgerufen:

buildSplashScreen(String[] anzuzeigender-Text, int Anzeigedauer-in-Millisekunden, String Unicode-Farbstyle, int x-Koordinate, int y-Koordinate);

Den Anzeigetext als Array (ein- oder mehrzeilig möglich), Backslashes im Anzeigetext müssen natürlich doppelt gesetzt werden, Unicode Farbstyle als String mit einer Form ähnlich wie “\u001b[1;37;1;44m", x- und y-Koordinate definiert die obere linke Ecke des Splash Screens.

Ausführung in Notepad++:
(schon mehrfach behandelt, aber nochmal zur Erinnerung)
Code anzeigen

(Vorbereitung hier) NppExec Plugin installieren, Batch erstellen mit folgendem Inhalt (oder unten downloaden):

code Java #3   farbige Splash Screens in der Konsole erstellenCode

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off

:: jar(s) specified?
if not [%4]==[] goto jars

:: compile and run without externals jars
if not [%1]==[] javac %1
if not [%2]==[] if not [%3]==[] start cmd.exe /c java -classpath %2 %3

:jars
setlocal enabledelayedexpansion
set /a N=0

:: reads up to 6 externals jars
for /f "tokens=1,2,3 delims=;" %%a in ("%~4") do (
	set /a N+=1
	set j1=%%a
	set j2=%%b
	set j3=%%c
)

set classpath=%~2
set jarpath=%~2
if not [%5]==[] set jarpath=%~5
set jars=.
if not [%j1%]==[] set jars=%jars%;%jarpath%\%j1%
if not [%j2%]==[] set jars=%jars%;%jarpath%\%j2%
if not [%j3%]==[] set jars=%jars%;%jarpath%\%j3%

:: compile and run with external jars
if not [%1]==[] javac -cp "%jars%" %1

if not [%2]==[] if not [%3]==[] start cmd /c ""c:\Program Files\Java\jre7\bin\java" -cp "%jars%;%classpath%" %3"

endlocal

:: usage:

:: just compile
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java"

:: compile with 1 external .jar
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar"

:: compile with 1 external .jar
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar;lib2.jar"

:: just run java code
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm"

:: run java code with one or multiple external jars
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar"

:: run java code with one or multiple external jars – up to 3 jars supported (change lines 15-28 [if you know batch] for more)
:: usage: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar;lib2.jar;jcurse.jar"

:: Notepad++ F6 Code:
::   NPP_SAVE
::   ?:\path\to\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "one_or_multiple_external.jar"

Batch, .java Code und alle nötigen .jars (jansi.jar in diesem Fall) in ein Verzeichnis, in Notepad++ F6 drücken, folgenden Code (erst anpassen!) einfügen:

NPP_SAVE
t:\Dropbox\Programmierung\Java\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "jansi.jar"

(bei mir liegen also .java, .jar und .bat in T:\Dropbox\Programmierung\Java\)

und dann sollte das funktionieren. Weitere Nutzungshinweise zur executor.bat befinden sich als Kommentar am Ende. Die Batch kann mittlerweile nur kompilieren (ohne und mit jars) und ausführen (ohne und mit jars).
Beachte: javac.exe und java.exe müssen in der Windows Umgebungsvariablen PATH eingetragen sein! siehe Vorbereitungen oder Google.

demo Java #3   farbige Splash Screens in der Konsole erstellenDemo

java windows cmd splash screen function Java #3   farbige Splash Screens in der Konsole erstellen

download Java #3   farbige Splash Screens in der Konsole erstellenDownload

executor [.bat]
SplashScreen [.java]
SplashScreen [.class]
jansi [.jar]


Java farbige Ausgaben in Windows Konsole HowTo 460x255 Java #2   farbige formatierte Konsolenausgaben in Windows   einfache Beispiele

Ich habe es mittlerweile aufgegeben eigene Funktionen für farbige Ausgaben oder Konsolenhandling (Konsole leeren, Cursor bewegen usw) in Java (unter Windows) zu schreiben. Fehlendes ANSI Verständnis von Windows sorgt dafür, dass ANSI Steuerzeichen nicht umgesetzt werden; damit sind Farben, Formatting und Handling in der Konsole schier unerreichbar.
Aber glücklicherweise gibt es dutzende Java Bibliotheken, die solche Dinge realisieren: Jansi, JCurses, Charva, uvm.

Ich habe bisher nur Jansi getestet und es klappt ganz gut. Jansi installiert das Ansi Verständnis in die Konsole und ermöglicht somit die ordnungsgemäße Nutzung dieser Steuerzeichen sowohl mit der eigenen Funktion AnsiConsole.out als auch mit der normalen Funktion System.out.

Ich habe die Farbgestaltung und ein paar Handlingsachen mal in einem Beispiel zusammengepackt.

code Java #2   farbige formatierte Konsolenausgaben in Windows   einfache BeispieleCode

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

import java.io.IOException;
import java.io.*;
// Jansi Bibliothekbestandteile importieren, logischerweise muss das sein.
// Diese imports befinden sich in der jansi.jar, die dann beim kompilieren und ausführen mit eingebunden werden muss
// siehe http://hannes-schurig.de/17/04/2012/java-2-farbige-formatierte-konsolenausgaben-in-windows-einfache-beispiele/
import org.fusesource.jansi.AnsiConsole;
import org.fusesource.jansi.*;

public class Farben {

/*
	Author: 	 Hannes Schurig
	Created: 	 16.4.2012
	Changed: 	 16.4.2012
	Version: 	 1.0
	Changelog:
		v1.0:	 Farbige Ausgaben und Konsolenhandling dank jansi.jar, verschiedene Beispiele
	Title: 		 Farben
	Quellen:	jansi Doku: http://jansi.fusesource.org/documentation/api/index.html

http://en.wikipedia.org/wiki/ANSI_escape_code

*/

  public static final String CLS = "\u001b[2J";
  public static final String TOP = "\u001b[H";
  public static final String UP = "\u001b[1F";
  public static final String LEFT = "\u001b[1G";
  public static final String DEL = "\u001b[2K";
  public static final String DEL_LEFT = "\u001b[1K";
  public static final String DEL_RIGHT = "\u001b[0K";
  public static final String BOLD = "\u001b[1m";
  public static final String RESET = "\u001b[0m";
  public static final String SPLASH = "\u001b[1;37;44m";
  public static final String f1 = "\u001b[1;37;46m";
  public static final String f2 = "\u001b[1;34;41m";
  public static final String f3 = "\u001b[1;31;45m";
  public static final String f4 = "\u001b[1;36;42m";
  public static final String f5 = "\u001b[1;35;43m";

	public static void main(String[] args) throws IOException, InterruptedException {
		try {
			// Installation der AnsiConsole und Einbetttung der Funktionalitäten in die System.out Funktion
			AnsiConsole.systemInstall();
		}catch(Exception e){}
		// muss nicht in einer try catch stehen, würde ich persönlich aber bevorzugen

		// Ansi Objekt erstellen
		Ansi ansi=Ansi.ansi();

		// AnsiConsole.out wird für ANSI Steuerzeichenausgaben genutzt
		// Farb- oder Formatierungsanweisungen immer vor den Text, den es betreffen soll.
		// Diese Formatierungen bleiben so lange aktiv, bis sie neu gesetzt werden. Also auch über mehrere Ausgabebefehle hinweg.
		// Ein Zurücksetzen der Farb- und Formatierungsanweisungen kann mit [0m oder [m erfolgen (hier in RESET gespeichert).
		AnsiConsole.out.println( f1 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f2 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f3 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f4 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f1 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f2 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f3 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( f4 + " Dies ist ein Test " + RESET );
		AnsiConsole.out.println( SPLASH + " Dies ist ein Test " );
		AnsiConsole.out.println( " Eine Zeile ohne RESET davor ist wie die vorherige. " + RESET );
		AnsiConsole.out.println( " Wieder normal " );

		// Pause von 5 Sekunden (main Funktion braucht throws InterruptedException und import java.io.*; nötig)
		Thread.sleep(10000);

		// Ausgabe von ANSI [2J und [H ( auch: [1;1H ) für 'Clear Screen' und 'Cursor to top left cornor'
		AnsiConsole.out.print( CLS + TOP );

		// weiterhin kann man System.out und System.console() verwenden
		System.console().printf( " CLS löscht zwar die Zeichen aber nicht farbige Überreste, " );
		System.console().printf( " daher müssen diese Zeile für Zeile gelöscht werden. " );

		Thread.sleep(10000);

		// echter CLS Befehl mit mehrfachem Zeile Löschen und erneutem Hochspringen am Ende
		for(int i=0;i<50;i++)
		{
			AnsiConsole.out.println( RESET + DEL);
		}
		AnsiConsole.out.print( CLS + TOP );
		// echter CLS Ende

		AnsiConsole.out.print(ansi.cursor(10,10) + SPLASH + " Positionieren des Cursors kann auf 2 verschiedene Wege passieren: " );
		AnsiConsole.out.print(ansi.cursor(11,10) + " Entweder generiert man sich das Ansi Objekt (siehe oben) und nutzt " );
		AnsiConsole.out.print(ansi.cursor(12,10) + " dann die ansi.cursor(row, column) Funktion oder man nutzt direkt die " );
		AnsiConsole.out.print( "\u001b[13;10H entsprechenden ANSI Steuerzeichen dafür. Also [row;columnH " );
		AnsiConsole.out.print( "\u001b[14;10H wie in den letzten beiden Zeilen hier zu sehen. " + RESET );
		// System.out bietet nach der AnsiConsole.systemInstall die gleichen Funktionalität
		System.out.print( "\u001b[16;10H\u001b[1;37;41m Grundsätzlich brauch man sich also gar keine Variablen für Formatierungen setzen\u001b[m " );
		System.out.print( "\u001b[17;10H\u001b[1;37;41m und kann alle Steuerzeichen händisch eingeben. Variablen sind aber zu empfehlen icon wink Java #2   farbige formatierte Konsolenausgaben in Windows   einfache Beispiele \u001b[0m " );

		Thread.sleep(10000);

		// echter CLS Befehl mit mehrfachem Zeile Löschen und erneutem Hochspringen am Ende
		for(int i=0;i<50;i++)
		{
			AnsiConsole.out.println( RESET + DEL);
		}
		AnsiConsole.out.print( CLS + TOP );
		// echter CLS Ende

		AnsiConsole.out.println("\n\n" + BOLD + "Choose a menu item with the specified number key" +"\n"+ "or press another key to exit." +"\n\n"+ " >> " + RESET);

		try {System.in.read();}catch(Exception e){}
	}
}

In diesem Beispiel nutze ich eigens definierte Variablen mit Ansi Steuercodes und die ansi.cursor() Funktion. Vermutlich bietet Jansi weitere fertig ausprogrammierte Lösungen in Form von Funktionen für Dinge, die ich hier noch manuell gemacht habe (ein richtiges Clear Screen z.B.). Für weitere fertige Lösungen schaut bitte die Jansi Dokumentation durch.

Ausführung in Notepad++:
(Vorbereitung hier) NppExec Plugin installieren, Batch erstellen mit folgendem Inhalt (oder unten downloaden):

code Java #2   farbige formatierte Konsolenausgaben in Windows   einfache BeispieleCode

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

@echo off

:: jar(s) specified?
if not [%4]==[] goto jars

:: compile and run without externals jars
if not [%1]==[] javac %1
if not [%2]==[] if not [%3]==[] start cmd.exe /c java -classpath %2 %3

:jars
setlocal enabledelayedexpansion
set /a N=0

:: reads up to 6 externals jars
for /f "tokens=1,2,3 delims=;" %%a in ("%~4") do (
	set /a N+=1
	set j1=%%a
	set j2=%%b
	set j3=%%c
)

set classpath=%~2
set jarpath=%~2
if not [%5]==[] set jarpath=%~5
set jars=.
if not [%j1%]==[] set jars=%jars%;%jarpath%\%j1%
if not [%j2%]==[] set jars=%jars%;%jarpath%\%j2%
if not [%j3%]==[] set jars=%jars%;%jarpath%\%j3%

:: compile and run with external jars
if not [%1]==[] javac -cp "%jars%" %1

if not [%2]==[] if not [%3]==[] start cmd /c ""c:\Program Files\Java\jre7\bin\java" -cp "%jars%;%classpath%" %3"

endlocal

:: usage:

:: just compile
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java"

:: compile with 1 external .jar
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar"

:: compile with 1 external .jar
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "lib1.jar;lib2.jar"

:: just run java code
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm"

:: run java code with one or multiple external jars
:: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar"

:: run java code with one or multiple external jars - up to 3 jars supported (change lines 15-28 [if you know batch] for more)
:: usage: executor.bat "C:\Pfad\zur\Javadatei\MeinProgramm.java" "C:\Pfad\zur\Javadatei" "MeinProgramm" "lib1.jar;lib2.jar;jcurse.jar"

:: Notepad++ F6 Code:
::   NPP_SAVE
::   ?:\path\to\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "one_or_multiple_external.jar"

Batch, .java Code und alle nötigen .jars (jansi.jar in diesem Fall) in ein Verzeichnis, in Notepad++ F6 drücken, folgenden Code (erst anpassen!) einfügen:

NPP_SAVE
t:\Dropbox\Programmierung\Java\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)" "jansi.jar"

(bei mir liegen also .java, .jar und .bat in T:\Dropbox\Programmierung\Java\)

und dann sollte das funktionieren. Weitere Nutzungshinweise zur executor.bat befinden sich als Kommentar am Ende. Die Batch kann mittlerweile nur kompilieren (ohne und mit jars) und ausführen (ohne und mit jars).
Beachte: javac.exe und java.exe müssen in der Windows Umgebungsvariablen PATH eingetragen sein! siehe Vorbereitungen oder Google.

demo Java #2   farbige formatierte Konsolenausgaben in Windows   einfache BeispieleDemo
0 Java #2   farbige formatierte Konsolenausgaben in Windows   einfache Beispiele
download Java #2   farbige formatierte Konsolenausgaben in Windows   einfache BeispieleDownload

executor [.bat]
Farben [.java]
Farben [.class]
jansi [.jar]


Meine ersten Schritte in Java sind getan. Diese beschränken sich noch auf die Textausgabe in einer Konsolenanwendung aber nach “Hello World” kommt nunmal sowas icon biggrin Java #1   dynamisch breite Titel Box in der Konsole erstellen dank ASCII/Unicode Nutzung
Gestern Abend habe ich meine erste Anwendung geschrieben.

Ziel: Sie soll die Nutzung von Unicode Zeichen zum Aufbau einer “Titel Box” verdeutlichen und dabei den Unterschied zwischen System.out und System.console() hervorheben. Am Ende wird der Aufbau dynamisch abhängig vom beinhalteten Text gestaltet und in einer Funktion verpackt.
Alle Anmerkungen, Hinweise, Links und Quellen stehen im Code.

code Java #1   dynamisch breite Titel Box in der Konsole erstellen dank ASCII/Unicode NutzungCode

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

public class Gruppenmitglieder {

/**
	Author: 	 Hannes Schurig
	Created: 	 6.4.2012 22:16
	Changed: 	 7.4.2012 00:28
	Version: 	 1.1
	Changelog:
		v1.1:	 Code der for-Schleife optimiert
		v1.0:	 Erstellung der GUI mit einer Funktion,
				 Ausgabe aller Namen eines festgelegten Arrays untereinander
	Title: 		 Gruppenmitglieder
	Description: Mein erster Versuch mit Java. Ziel ist die Ausgabe von vielen Namen.
				 Die Ausgabe soll mit nur 1 Schleife und einem Array erfolgen um
				 möglichst flexibel einsetzbar zu sein.
				 Ich ergänze das um einen Titel-Prototyp. Dieser soll dynamisch mit
				 einer Funktion erstellt werden können um ebenfalls flexibel und
				 einfach anwendbar zu sein.
**/

	public static void buildGUI(String text) {
		int length = text.length();
		String slength = String.valueOf(length);

		// Box mit den richtigen Maßen bauen
		System.console().printf("\u2554");
		for(int i=0; i<length; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u2557\n");
		System.console().printf("\u2551"+text+"\u2551 \n");
		System.console().printf("\u255A");
		for(int i=0; i<length; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u255D \n");
	}

	public static void main(String[] args) {
		/**
		   Hat 2 Stunden gedauert das Zusammenspiel des Character Encoding von Windows
		   und Java halbwegs zu verstehen. Die Windows CMD arbeitet mit der alten ANSI
		   Kodierung und System.out verwendet stur diese Systemkodierung.
		   ANSI beinhaltet aber zu wenig schöne Zeichen.
		   Für Extended ASCII und Unicode muss man System.console() nutzen,
		   wenn man nicht die Codepage des Systems vor der Ausführung verstellen
		   möchte (was nicht zu empfehlen ist).
		   System.console() erkennt die benötigte Kodierung automatisch.
		   Quelle: http://bit.ly/Htl3SH

		   BOX_DRAWING Unicode Chars: http://bit.ly/HtlmNb

		   Double Box Codes skizziert:

		   2554 2550 2566 2550 2557

		   2551      2551      2551

		   2560 2550 256C 2550 2563

		   2551      2551      2551

		   255A 2550 2569 2550 255D

		   Mehr? Alle Unicode Characters: http://bit.ly/HtmyjI

		   Let's go!

		**/

		/**
			einfache leere Box
			__________________
		**/
		System.console().printf("Box:\n");

		System.console().printf("\u2554\u2550\u2550\u2550\u2557 \n");
		System.console().printf("\u2551   \u2551 \n");
		System.console().printf("\u255A\u2550\u2550\u2550\u255D \n");

		/**
			breite Box mit wenig Code dank Schleife
			_______________________________________
		**/
		System.console().printf("breite Box:\n");

		// oberer Rand
		System.console().printf("\u2554");
		for(int i=0; i<19; i++) {
			System.console().printf("\u2550");
		}
		System.console().printf("\u2557 \n");

		// Mitte mit Text
		System.console().printf("\u2551 Dies ist ein Test \u2551 \n");

		// unterer Rand
		System.console().printf("\u255A");
		for(int i=0; i<19; i++) {
					System.console().printf("\u2550");
		}
		System.console().printf("\u255D \n");

		/**
			dynamische Boxbreite dank Zeichenzählung
			________________________________________
		**/
		System.console().printf("dynamische Box:\n");

		// gewünschter Boxtext (sollte nicht zu lang sein), Zeichen zählen
		String text = " 6.4.2012  |  Gruppenmitglieder ausgeben  |  Hannes Schurig ";
		int length = text.length();
		String slength = String.valueOf(length);

		// Box mit den richtigen Maßen bauen
		System.console().printf("\u2554");
		for(int i=0; i<length; i++) {
					System.console().printf("\u2550");
				}
		System.console().printf("\u2557\n");
		System.console().printf("\u2551"+text+"\u2551 \n");
		System.console().printf("\u255A");
				for(int i=0; i<length; i++) {
							System.console().printf("\u2550");
				}
		System.console().printf("\u255D \n");

		/**
			Programmieren I: LE01 Übung: Aufgabenblatt 1: Gruppenmitglieder ausgeben
			________________________________________________________________________
		**/
		System.out.println("");
		System.console().printf("Programmieren I: LE01 Übung: Aufgabenblatt 1: Gruppenmitglieder ausgeben:\n");
		System.out.println("");

		// Titel erstellen
		buildGUI(" 6.4.2012  |  Gruppenmitglieder ausgeben  |  Hannes Schurig ");
		System.out.println("");
		System.out.println("");

		// Namen festelegen
		String[] namen = {"Hannes Schurig", "Max Mustermann", "Max Mustermann", "und viele mehr"};

		// sexy Abarbeitung von Arrays mit wenig Code: http://bit.ly/HoeKyp
		for(String s : namen){
			System.console().printf(s+"\n");
		}

		System.out.println("");
		System.out.println("");

		/**
			Farbige Ausgabe war leider nicht so einfach wie gedacht, DOS ist da etwas
			zu alt für. Es gibt portable Ansätze aber die sind mir jetzt zu krass.
			Siehe: http://bit.ly/Htrg0Y
		**/
	}

}

Hinweis: Ich benutze Javadoc Kommentarblöcke (mit 2 Sternen) weil die Blog-Code-Anzeige bei normalen Kommentarblöcken (mit 1 Stern) spinnt. Dient also nur der korrekten Darstellung im Blog.

Ausgabe:
java unicode ascii encoding in console cmd promt box drawing 460x255 Java #1   dynamisch breite Titel Box in der Konsole erstellen dank ASCII/Unicode Nutzung


Ziel soll es sein mit Notepadd++ (in Windows) einfache Java Anwendungen schreiben und sie mit einem einfachen Tastendruck testen zu können. Das ganze soll schnell und einfach sein und damit ein ständiges “javac ba.class java bla” in der Konsole ersparen.

Anmerkung: es geht bei “einfachen Java Anwendungen” hauptsächlich erstmal um Konsolenprogramme, die in der Windows CMD oder der internet Console des Editors ausgeführt werden soll.

Notepad++ bietet für solche Zwecke die Erweiterung “NppExec”. Sollte die Erweiterung nicht installiert sein ist das schnell über Erweiterungen -> Plugin Manager -> Show Plugin Manager -> NppExec -> Install erledigt. NppExec führt beliebige Befehlszeilen per Tastenkombi aus, speichert diese in Profilen usw.
Ihr könnt F6 drücken oder per Erweiterungen -> NppExec -> Ausführen das Pupup öffnen, in das ihr eure Befehlszeilen eintragen könnt.

2 Möglichkeiten stehen zur Verfügung:

Ausführung innerhalb von Notepad++ in der eigenen Konsole:
F6 Code:
Quelle

NPP_SAVE
javac "$(FULL_CURRENT_PATH)"
java -classpath "$(CURRENT_DIRECTORY)" "$(NAME_PART)"

Das Dokument wird gespeichert, der komplette Pfad wird an den Compiler übergeben, kompiliert und danach mit der java.exe ausgeführt.
Achtung: Damit das funktioniert muss der Java SDK /bin/ Ordner in der Path Umgebungsvariable des Betriebssystems eingetragen sein. Das passiert normalerweise bei der Installation der SDK in Windows automatisch. Ich fand aber auch schon viele Rechner (u.A. 2 von meinen) wo das nicht so war. Testet es, indem ihr aus einem beliebigen Ordner heraus folgende cmd Befehle abfeuert:
notepad++ java internal console external cmd path 460x133 Java #0   Konsolenanwendungen mit Notepad++ schreiben und testen   internal vs external Console
Sollte gehen; if not, do this (Neustart oder Ab- und Anmelden danach).

Führt nun den oben stehenden F6 Code aus. Wenn alles funktioniert und in der Konsole des Editors euer Programm erscheint ist alles super.

Wenn auch nach dem Setzen der Umgebungsvariablen mit Neustart noch folgendes Problem in der Konsole auftritt:

javac "T:\Dropbox\Programmierung\Java\TextGUI.java"
CreateProcess() failed with error code 2:
Das System kann die angegebene Datei nicht finden.

… dann geht’s euch wie mir. Ich hab keine Ahnung warum Notepad++ bei mir die javac nicht findet.
Auch ein einfaches javac -version geht nicht. Die normale Windows CMD kann javac aus jedem Ordner heraus finden. Sowohl 32bit als auch 64bit SDK ist installiert, beide Pfade stehen in der Path.
notepad++ java internal console external cmd path problems Java #0   Konsolenanwendungen mit Notepad++ schreiben und testen   internal vs external Console

Keine Ahnung, egal, Workaround:

Erstellt eine Batch Datei (ich nenne sie “executor.bat”) irgendwo, folgender Inhalt:

if not [%1]==[] javac %1
if not [%2]==[] if not [%3]==[] start cmd.exe /c java -classpath %2 %3

Die Batch kann mit 1 oder 3 Parametern aufgerufen werden. Bei nur 1 Parameter wird die Java Datei nur kompiliert. Bei 3 Parametern wird sie von der Windows CMD ausgeführt (brauchen wir nur zur externalen Ausführung, siehe unten).

Hier noch den F6 Code:

NPP_SAVE
Pfad\zur\Batch\executor.bat "$(FULL_CURRENT_PATH)"
java -classpath "$(CURRENT_DIRECTORY)" "$(NAME_PART)"

Die Batch kompiliert und der interne Interpreter von Notepad++ führt die Anwendung in der internen Konsole aus.
notepad++ java kompilieren internal console nppexec 460x227 Java #0   Konsolenanwendungen mit Notepad++ schreiben und testen   internal vs external Console

Ausführung außerhalb von Notepad++ in der Windows CMD:
Auch hier brauchen wir die oben erstellte .bat Datei mit folgendem Inhalt:

if not [%1]==[] javac %1
if not [%2]==[] if not [%3]==[] start cmd.exe /c java -classpath %2 %3

…und folgendem F6 Code:

NPP_SAVE
t:\Dropbox\Programmierung\Java\executor.bat "$(FULL_CURRENT_PATH)" "$(CURRENT_DIRECTORY)" "$(NAME_PART)"

Jetzt müsste sich kurz ein Windows CMD Fenster öffnen und direkt wieder schließen. Denn wie wir wissen schließt sich ein Java Konsolenprogramm (wie auch die Windows Konsole) wenn alle Befehle abgearbeitet sind.
Also lassen wir es am Ende pausieren. Dazu nutzen wir eine Nutzereingabe, die das Konsolenfenster so lange aufhält bis dieser eine Taste drückt.

Ihr müsst zusätzlich java.io.IOException importieren, eurer main Funktion die throws IOException Erweiterung geben und an das Ende 2 Zeilen hängen.
Like that:

import java.io.IOException;
public class TextGUI {
	public static void main(String[] args) throws IOException {
		System.out.println("1234 1234 1234 1234\b9999");
		System.out.println("1234 1234 1234 1234\r9999");

		System.out.println("Press Enter to continue...");
		System.in.read();
	}
}

notepad++ java kompilieren run in external windows cmd console 460x234 Java #0   Konsolenanwendungen mit Notepad++ schreiben und testen   internal vs external Console

Okay, warum denn jetzt 2 verschiedene Wege? Reicht nicht die interne Konsole oder die externe CMD?
Vielleicht ist es jemanden aufgefallen: die Ausgaben unterscheiden sich trotz selbem Code voneinander.
Die interne Konsole der Editoren (Notepad++ wie auch andere Programme wie Eclipse) behandeln ASCII Steuerzeichen (\b \r \t \n) nämlich anders als die Windows CMD. Wer das wirklich verstehen will muss wohl sowas hier lesen.

Jedenfalls kann es helfen beide Wege zu testen bevor man ein solches Konsolenprogramm freigibt.




Zufälliger Post des Tages

Translator

Categories

Admin

Sie möchten hier werben oder Sponsor auf längere Zeit werden? Ich garantiere Ihnen unschlagbare Preise bei meinen Besucherzahlen. Egal ob Banner, Textlinks oder andere Werbeformen. Informieren Sie sich bei mir unter werbung@hannes-schurig.de