Mittwoch, 4. Dezember 2013
Java Console mit eclipse
Java bietet seit Version 1.6 eine einfachere Methode (als java.io.BufferedReader) von der Konsole zu lesen: java.io.Console. Leider kann Console nicht innerhalb von eclipse verwendet werden, da sich diese Entwicklungsumgebung direkt mit der Ein- und Ausgabe verbindet.
Es gibt eine - etwas umständliche - Lösung dieses Problems, die hier auf stackoverflow.com beschrieben wird.
Hier eine für eclipse unter Linux adaptierte Variante. Nehmen wir an, die folgende Klasse, soll mit dem Debugger getestet werden:
import java.io.Console; public class TestDebugging { public static void main(String[] args) { Console console = System.console(); if (console != null) { String line = console.readLine(">>> "); System.out.println(line); } else { System.err.println("sorry, no console available!"); } } }Startet man diese Klasse in eclipse (egal ob "Run" oder "Debug"), dann wird immer
"sorry, no console available!"
angezeigt. Startet man die Klasse in einem Terminal, so funktioniert sie problemlos:
hp@if211l $ java TestDebugging >>> test test hp@if211l $
Das Prinzip
Man muss das Java-Programm in einem Terminal starten und sich mit eclipse "remote" verbinden. Dazu verwendet man für den Start der Klasse folgenden Aufruf:
hp@if211l $ java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y TestDebugging Listening for transport dt_socket at address: 8787
suspend=y
) nun darauf, dass man sich mit dem Debugger über Port 8787 (address=8787
) hin verbindet. Im eclipse ruft man dann bei geöffnetem Sourcecode der Klasse "Run>Debug Configurations" auf und legt eine neue "Remote Java Application" an.
Nachdem man (sinnvollerweise) einen Breakpoint gesetzt hat, kann man diese Debug-Konfiguration aufrufen und die Klasse debuggen. Die Ein- und Ausgabe erfolgt dann im Terminal:
Umsetzung
Um die Sache etwas komfortabler zu machen, sollte man folgendes Shell-Script erstellen:
#!/bin/bash # launch java for external debugging export D_PORT=8787 export D_DBG="-Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,\ address=${D_PORT},server=y,suspend=y" x-terminal-emulator -x java ${D_DBG} -cp ./bin/ $1 &
Dieses Script kann nun unter "Run>External Tools Configuration" eingerichtet werden:
Das Script startet ein Terminal-Fenster (x-terminal-emulator -x
) mit dem entsprechenden Java-Aufruf (java -Xdebug -Xnoagent -Xrunjdwp:transport=dt_socket,address=8787,server=y,suspend=y
).
Debugging funktioniert wie oben beschrieben, indem man "Remote Java Application" verwendet.
Labels: eclipse, Java, POS1-2, POS1-3, POS1-4
Abonnieren Posts [Atom]
Kommentar veröffentlichen