2016-06-18 8 views
3

Was ist ein Unterschied, wie Idee Batch-Konfiguration im Vergleich zu reinen cmd.exe in Windows ausführen?Intellij stdin rejection

Ich erstelle Batch-Konfiguration für meine Java-App ausführen. Wenn ich es ausführe, zeige es mir Ergebnis-Scipt in der Idea-Konsole:

cmd.exe /c java -classpath C:\app;C:\app\libs.jar App < input.txt 

Diese App wartet Eingabe von Standard-Eingabe. Diese Zeile sollte es ausführen und aus der Datei input.txt lesen. Aber nicht lesen, warten auf Eingabe. Wenn ich^D in der Ideenkonsole drücke, druckt die App, dass keine Eingaben vorhanden sind.

In der gleichen Zeit, wenn ich dieses Startskript kopieren von Idea-Konsole direkt auf Windows Cmd kopieren, geschieht alles wie erwartet, App liest die Datei und korrekt fertig.

Ich habe stackoverflow Antworten gelesen und Vorschläge finden, um External Tool Idee Option zu versuchen. Ich versuche es als:

java -classpath C:\app;C:\app\libs.jar App < input.txt 

Aber es immer noch auf Eingabe warten. Neben Java-Anwendung ausführen Konfiguration, wenn ich Dateinamen als Argument übergeben, es für die Eingabe warten:

"C:\Program Files\Java\jdk1.8.0_92\bin\java" 
-Didea.launcher.port=7533 
"-Didea.launcher.bin.path=C:\Program Files (x86)\JetBrains\IDEA\bin" 
-Dfile.encoding=UTF-8 
-classpath "long..long..classpath" 
com.intellij.rt.execution.application.AppMain Col < input.txt 

habe ich einige Links (one, two, three) über stdin rederection finden und es scheint, als gäbe es keine Möglichkeit gibt, um dies von der Idee nur aus dem Code zu tun. Vielen Dank!

+1

Der einzige Weg, ich finde tat, sind Passdateinamen als Argument und fügen Sie wie zu Beginn des Haupt so etwas wie : 'if (args.length> 1) System.setIn (neuer FileInputStream (args [1]));' –

+1

@ useruser272933 Niemals von 'System.setIn' gewusst. Wenn Sie das als Antwort schreiben können, würde ich es sicherlich aufwerten. –

+0

habe es als Antwort geschrieben!) –

Antwort

7

Die einzige Art, wie ich gefunden, ist Pass Dateinamen als Argument Hauptfunktion und fügt Zeile wie folgt aus:

if(args.length > 1) 
    System.setIn(new FileInputStream(args[1]));