Java+Eclipse: wie prüfst du ein java-Programm, dass der Empfang Pipe/stdin umgeleitet?
Ich bin mit Eclipse zum entwickeln von Java-Programmen, und dachte, ich würde eine option hinzufügen, um mein Programm zum analysieren von stdin, wenn keine Argumente. (sonst ist es eine Datei analysiert)
Ich habe Probleme, wenn ich ausführen "somecommand | java -jar myjar.jar"
auf und ging zu Debuggen... dann realisierte ich weiß nicht, wie zu Beginn eines Prozesses in Eclipse so. Und wenn ich es über die Eingabeaufforderung kann ich nicht anfügen an einen Laufenden Prozess, da der Prozess startet sofort.
Irgendwelche Vorschläge, wie zu Debuggen?
Bearbeiten: siehe, die Sache ist die, ich schrieb mein Programm ursprünglich zu nehmen, ein filename-argument. Dann dachte ich, es wäre nützlich für Sie zu treffen stdin als gut, so dass ich hat abstract InputStream aus meinem Programm (wie Herr Warteschlange schon sagt). Es funktioniert einwandfrei Betriebssystem auf eine Datei (java -jar myjar.jar myfile
), aber nicht in Betrieb, wenn ich type myfile | java -jar myjar.jar
. Ich vermute, dass es etwas anderes in den zwei Szenarien (eof-Erkennung ist anders?) aber ich möchte wirklich zu Debuggen.
//overall program structure follows:
public static void doit(InputStream is)
{
...
}
public static void main(String[] args)
{
if (args.length > 0)
{
//this leaves out the try-catch-finally block,
//but you get the idea.
FileInputStream fis = new FileInputStream(args[0]);
doit(fis);
fis.close();
}
else
{
doit(System.in);
}
}
- Würde setzen die Argumente in Ihrer Eclipse-Konfiguration auszuführen, die den trick tun?
- Dies sind keine Argumente. Es ist die Tatsache, dass ich zu Rohr in somecommand.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Führen Sie Ihre app mit der pipe, auf der Kommandozeile, aber fügen Sie die JVM-args zum remote-debugging, wie diese:
suspend=y
sagen die JVM nicht wirklich das Programm ausführen, bis der debugger angefügt ist.Als Nächstes gehen Sie in der Eclipse-debug-Startkonfigurationen (
Run -> Debug Configurations...
) und erstellen Sie eine "Remote Java Application", um eine Verbindung zu Ihrer app. Führen Sie den launch in Eclipse erstellt (nach setzen von breakpoints) und Sie sollten in der Lage sein, zu Debuggen. Nicht sehr bequem, aber wenn Sie nicht können reproduzieren Ihre Probleme ohne die Leitung, ist dies eine option.Wenn ich die Interpretation deiner Frage Recht, ich glaube, Sie wollen einfach nur wissen, wie Sie die Eingabe über standard-und debug in eclipse.
Wenn es einfache Eingabe, können Sie tatsächlich manuell eingeben System.Daten über die eclipse-Konsole während das Programm ausgeführt wird. Starten Sie einfach die Eingabe in der Konsole-Fenster, und drücken Sie die EINGABETASTE, um zu senden den text zu Standard.
Wenn es etwas komplizierter ist, würde ich vorschlagen, die Abstraktion der Lesen, Sie versuchen zu tun, nehmen Sie einen InputStream. In Ihrem Programm, können Sie System.als InputStream. Zum Debuggen, können Sie das senden einer anderen InputStream. Zum Beispiel, könnten Sie Ihre Eingabe in einer Datei, und übergeben Sie ein FileInputStream, um die Methode zu testen.
BEARBEITEN:
Ohne zu sehen, einige mehr code, ich bin mir nicht sicher, aber vielleicht sind Sie auf etwas mit eof-Erkennung. Ein FileInputStream hat ein definiertes Ende der Datei, aber ich denke, dass die System.in hat nichts dergleichen. Ihre Leser vielleicht nur warten, um zu Lesen das nächste Zeichen und nie voran. Haben Sie vielleicht manuell stoppen, die Lesen, nachdem Sie Sie gelesen haben "genug".
Vielleicht diese Lösung der Schaffung einer named pipe könnte hier zutreffen.
Nächsten in der debug-Konfiguration, hinzufügen
< foo
im args, so dass Sie Ihr Programm Debuggen als:Ich bin spät zur party. Aber kann man sich die "Allgemeine" Registerkarte in der debug-Konfiguration für Ihr Projekt. Dort sollten Sie in der Lage, um zu sehen, ein Abschnitt mit der Bezeichnung "Standard-Eingabe und-Ausgabe". Nehmen Sie die Konsole mit input-Dateien und output-Dateien auf diese Weise.