Java: Mysteriöser Java-Uncaught-Exception-Handler [mit Code]

8

Etwas Seltsames ist passiert. Ich habe ein Java-Programm geschrieben, in dem ich nichts unternommen habe, um nicht abgefangene Exceptions in irgendeiner speziellen Weise zu behandeln. Aber wenn ich dieses ein bestimmtes Programm in Windows 7 ausführe, gibt es diese nicht abgefangene Ausnahme in einem statischen Kontext, der von main aufgerufen wird und ein Fenster auftaucht, das die Ausnahme anzeigt. Ich habe versucht, ein kleines Programm zu schreiben, um diesen Effekt zu vervielfältigen, ohne Erfolg. Ein Programm (das ich komplett von Hand geschrieben habe) erzeugt ein Popup, während kein anderes dasselbe tut.

Ich möchte dies besonders nachverfolgen, damit ich Code hinzufügen kann, der andere CAUGHT-Exceptions dazu bringt, den Stack-Trace auf ähnliche Weise anzuzeigen.

Ich habe im IRC danach gefragt, aber die Leute sagen mir, dass das nicht passiert. Nun, es ist passiert. Es gibt einen Screenshot unten.

Ich denke, meine einzige Hoffnung ist, wenn jemand anderes dies erkennt und mir sagen kann, woher es kommt.

Danke!

UPDATE: Entschuldigung für die Verspätung, Code zu bekommen. Ich musste mich um einen kolikartigen Säugling kümmern. Bitte beachten Sie, dass dies eine Desktop-Java-App ist. Es ist kein Applet und es verwendet keinen Webstart.

Hier wird Code kopiert und eingefügt aus dem Programm, das den Dialog bekommt. Ich werde eine weitere Bearbeitung vornehmen, um Sie wissen zu lassen, ob mein Kollege (der die Ausnahme erhält) den Dialog für diesen Fall erhält. Ich habe darauf geachtet, alles, was zur Ausnahme geführt hat, einzubeziehen. Es fehlt nur die IPAddress-Klassenimplementierung, die jedoch nicht an der Ausnahme beteiligt ist, da sie erst nach dem Auftreten der Ausnahme verwendet wird. Notieren Sie die Sterne vor der Zeile, in der die Ausnahme auftritt. Diese Codezeile entspricht der Ausnahme, die Sie im Screenshot sehen können.

%Vor%

ZWEITES UPDATE: Mein Kollege meldet, dass dieses Programm den Dialog NICHT erzeugt. Der einzige Unterschied zwischen diesem Programm und dem Programm, das das Popup-Fenster erhält, besteht darin, dass das Programm, das das Popup-Fenster aufruft, von einem von AdvancedInstaller erzeugten Exe-Wrapper gestartet wird. Außerdem ist innerhalb des Java-Programms die Reihenfolge der Ausführung identisch. Ich habe das gegoogelt, und soweit ich finden kann, macht AdvancedInstaller gar nichts, was dazu führen würde, dass dieses Popup generiert wird. Ich bin mir nicht sicher, ob das möglich ist, ohne das Java-Programm zu ändern (was nicht der Fall ist), weil ich nicht sicher bin, ob Sie irgendetwas von außerhalb des Java-Programms tun können, um dies zu ermöglichen. Außer vielleicht capture stderr, aber das erklärt nicht, warum andere Programme, die von AdvancedInstaller umschlossen werden, dieses Popup nicht erzeugen oder warum spätere von dieser Anwendung erzeugte Ausnahmen auch dieses Popup nicht erzeugen.

    
Timothy Miller 31.07.2012, 18:51
quelle

1 Antwort

7

2. Antwort (Nachdem zusätzliche Informationen zur Frage hinzugefügt wurden)

Advanced Installer hat eine "Startfehlerprüfung" -Einstellung wie folgt beschrieben:

  

Überprüfung des Startfehlers

     

Jede nicht abgefangene Ausnahme vom Hauptthread ist   beschrieben in einem Dialogfeld, das es dem Benutzer erlaubt, entweder die   Anwendung oder um die Ausnahme zu ignorieren. Diese Option gilt nur für   GUI-Anwendungen.

Weitere Informationen: Ссылка .

1. Antwort

Dies hängt stark vom Kontext ab und Sie haben nicht genügend Informationen bereitgestellt, um eine sehr spezifische Antwort zu erhalten. Die loc2.LoC2.java ist wahrscheinlich benutzerdefinierter oder projektspezifischer Code.

Im Allgemeinen kann der nicht erfasste Handler jedoch über:

verwaltet (oder abgefragt) werden
  • Thread.setDefaultUncaughtExceptionHandler und
  • Thread.getDefaultUncaughtExceptionHandler

Weitere Informationen:

kaliatech 31.07.2012, 18:59
quelle