2010-12-17 9 views
0

Ich bin ein Java-Programm auf Eingabeaufforderung Der normale Verlauf nach dem Programm erfolgreich es zurück .. aufzufordern, kommt die Ausführung ist, was sind die möglichen Gründe, es nicht zurückkommen wird das Programm ausgeführtWas sind die möglichen Gründe dafür, dass selbst nach erfolgreicher Ausführung die Kontrolle nicht zurückkommt?

nach erfolgreich aufzufordern, warum wird es darum geht, nach der Ausführung aufzufordern, wieder zurück, um es

alt text

in der Regel nicht kommen, aber manchmal nicht ...

+2

Können Sie mehr Details oder Quellcode angeben, wenn Sie können? – Mudassir

+2

Wahrscheinlich einige Nicht-Daemon-Thread über (zum Beispiel der AWT EDT) verlassen. –

+0

Das Programm analysiert die PDF-Datei. Ich habe alle Ressourcen geschlossen. Auch das gleiche läuft gut und kommt zurück, um in den meisten meiner Freunde Computer, die die gleiche Einstellung haben wie meine. Der einzige Unterschied ist in RAM und Festplatte Kapazität ist langsamer .. Kann es möglich sein, Grund? (Ich weiß, es klingt komisch :)) Und wenn ja, wie kommt es zurück, um einige Male zu fragen? – Asha

Antwort

2

Das klingt wie eine Race-Bedingung. Etwas in der Abschaltsequenz Ihrer Anwendung ist nicht deterministisch und funktioniert oder funktioniert nicht, abhängig von verschiedenen plattformspezifischen (und möglicherweise externen) Faktoren. Es gibt wahrscheinlich keinen Sinn herauszufinden, was diese Faktoren sind (oder sein könnten), da es Ihnen nicht hilft, das Problem zu beheben.

Nur Unterschied ist in RAM Festplatte Kapazität ist langsamer .. Kann es möglich sein, Grund?

These könnte Faktoren sein, aber sie sind nicht die Ursache des Problems. Konzentrieren Sie sich darauf herauszufinden, was Ihre Anwendung nicht deterministisch macht.

Wie andere gesagt haben, ohne weitere Informationen (und relevanten Code) können wir nur raten.

Wenn die Anwendung nicht heruntergefahren werden konnte, erhalten Sie einen Thread-Dump. Oder versuchen Sie, es herunterzufahren, während es an einen Debugger angehängt ist. Dies kann Ihnen erlauben, einige Hinweise zu bekommen, was falsch läuft.

Schließlich ist die Brute-Force-Lösung einfach die main Methode (oder was auch immer) Anruf System.exit(0) auf seinem Weg nach draußen zu haben. Aber hüte dich vor der Möglichkeit, dass Dateien nicht gelöscht werden, wenn du das tust.

1

Weil es nicht Finishing. Wenn es manchmal passiert und manchmal nicht, mein Instinkt ist, dass Sie eine Art von Race Condition haben. Wahrscheinlich hängt einer Ihrer Bereinigungsschritte, wenn eine andere Aktion ausgeführt wurde oder nicht.

Ohne Quellcode wird dies schwer zu debuggen sein.

+0

Wenn ja, warum kommt es dann manchmal zurück? Auch derselbe Code wird erfolgreich ausgeführt und kehrt zur Eingabeaufforderung in anderen Computern zurück. – Asha

+1

@Asha, weil es mit Race Conditions sehr schwer ist, Verhalten vorherzusagen. Es könnte sein, dass etwas schnell genug in einem Thread geschehen muss, damit ein anderer die Ausführung beenden kann. Auf schnelleren Computern passiert es fast immer, bei Ihnen passiert es seltener. Dies ist eine Art Fehler, der nicht sehr reproduzierbar ist.Versuchen Sie es mit einem Debugger auszuführen und sehen Sie, welche Threads noch ausgeführt werden und wo sie hängen bleiben. –

0

Es könnte noch ein aktiver Thread laufen, der nicht im "Daemon" -Modus ist. Wenn Sie z. B. eine Swing-GUI haben und alle Rahmen geschlossen sind, ist der Event-Dispatch-Thread weiterhin aktiv, sodass die JVM nicht beendet wird.

Verwandte Themen