Java #0 – Konsolenanwendungen mit Notepad++ schreiben und testen – internal vs external Console

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:

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.

Auch interessant:  Windows CMD: Aliase und Befehlskombis einrichten

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.

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.

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.

Auch interessant:  Windows 10: Installation von .NET-Framework 3.5 trotz 0x800F081F und 0x800F0906

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();
	}
}

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.