Hallo zusammen!
Im Rahmen eines Projekts möchte ich innerhalb einer Webanwendung einen Compilecheck für java-Dateien anbieten. Es sollen also Dateien hochgeladen werden, die dann auf Kompilierbarkeit hin geprüft werden sollen. Hierzu habe ich folgendes Beispiel leicht angepasst:
Ich habe nun folgendes Problem: Lade ich eine nicht-kompilierbare Datei hoch, zeigt mir der Check an, dass die Datei nicht kompiliert werden kann. Lade ich nun die gleiche Datei auf einem anderen Rechner hoch, bleibt die Anwendung bei p.waitFor hängen. Ich habe auch ausprobiert, mehrere zusammengehörige Dateien (main-Programm und darin benutzte Klasse) zu testen. Ergebnisse wie oben auf zwei Rechnern verschieden. Offenbar kann jedoch bei einem Fehler in einer Klasse noch erkannt werden, dass es nicht kompiliert. Sind in der Klasse aber zwei Fehler, landet man wieder in der Endlosschleife.
Ich bin ziemlich ratlos, da ich mir die verschiedenen Ergebnisse nicht erklären kann. Ich weiß auch nicht, wie ich die Endlosschleife unterbrechen/vermeiden könnte. Habe überlegt, einen zusätzlichen Prozess anzulegen, der nach einem bestimmten Timeout einfach den kompilierenden Prozess unterbricht. Das lässt sich meines Erachtens aber nicht einsetzen, da es ja möglich wäre, dass ein größeres Programm länger zum Kompilieren brauchen würde... Hat jemand einen Tipp, wie ich hier am besten vorgehen kann? Oder kann mir vielleicht jemand erklären, wie die verschiedenen Ergebnisse zustande kommen?
Danke schonmal für Eure Antworten!
Im Rahmen eines Projekts möchte ich innerhalb einer Webanwendung einen Compilecheck für java-Dateien anbieten. Es sollen also Dateien hochgeladen werden, die dann auf Kompilierbarkeit hin geprüft werden sollen. Hierzu habe ich folgendes Beispiel leicht angepasst:
Java:
private boolean compile(String javaFile) throws IOException {
Process p = Runtime.getRuntime().exec(“javac “ + javaFile);
try {
p.waitFor();
}
catch (InterruptedException ie) {
System.out.println(ie);
}
int ret = p.exitValue();
return ret == 0;
}
Ich habe nun folgendes Problem: Lade ich eine nicht-kompilierbare Datei hoch, zeigt mir der Check an, dass die Datei nicht kompiliert werden kann. Lade ich nun die gleiche Datei auf einem anderen Rechner hoch, bleibt die Anwendung bei p.waitFor hängen. Ich habe auch ausprobiert, mehrere zusammengehörige Dateien (main-Programm und darin benutzte Klasse) zu testen. Ergebnisse wie oben auf zwei Rechnern verschieden. Offenbar kann jedoch bei einem Fehler in einer Klasse noch erkannt werden, dass es nicht kompiliert. Sind in der Klasse aber zwei Fehler, landet man wieder in der Endlosschleife.
Ich bin ziemlich ratlos, da ich mir die verschiedenen Ergebnisse nicht erklären kann. Ich weiß auch nicht, wie ich die Endlosschleife unterbrechen/vermeiden könnte. Habe überlegt, einen zusätzlichen Prozess anzulegen, der nach einem bestimmten Timeout einfach den kompilierenden Prozess unterbricht. Das lässt sich meines Erachtens aber nicht einsetzen, da es ja möglich wäre, dass ein größeres Programm länger zum Kompilieren brauchen würde... Hat jemand einen Tipp, wie ich hier am besten vorgehen kann? Oder kann mir vielleicht jemand erklären, wie die verschiedenen Ergebnisse zustande kommen?
Danke schonmal für Eure Antworten!