2016-04-26 13 views
0

Dies ist mein Code:Prozess von Java-Code gestartet kehrt nicht

Process p1; 
    try { 
     p1 = Runtime.getRuntime().exec("utils/a.out <utils/test_c2.txt> utils/result.txt"); 
     p1.waitFor(); 
    } catch (Exception e) { 
     System.out.println("Something went bad!"); 
    } 

ich gelesen habe, dass es ein Problem mit dem Eingangspuffergröße sein sollte, aber in diesem Fall alle die Ausgabe von der Der gestartete Prozess wird auf "utils/result.txt" umgeleitet, sodass der gestartete Prozess nicht zum Deadlock führen sollte. Wenn ich denselben Befehl vom Terminal aus starte, funktioniert es. Vielleicht wäre es hilfreich zu beschreiben, was "a.out" ist. Ich erhielt es von einer Flex-Datei wie folgt:

$ flex rulex.lex 
$ gcc lex.yy.c -lfl 

Jede Hilfe wäre willkommen.

+0

Sie sollten in der catch-Klausel 'e.printStackTrace();' hinzufügen, um zu sehen, was die Ausnahmeursache ist, anstatt nur zu sagen: 'Etwas ist schiefgegangen!'. – dan

Antwort

1

Der Subprozess wartet darauf, Daten unter stdin zu lesen. Java startet den Subprozess in einer Shell nicht, daher sind keine Pipes verfügbar. Sie müssen Ihr Unterprogramm Dateien als Argumente nehmen und die Dateien selbst öffnen. Eine andere Möglichkeit ist es, eine Shell (wie bash) zu starten und sie zu veranlassen, das Programm auszuführen, dann funktioniert das Piping von Dateien.