Domanda

Per applicazioni desktop, è utile per vedere la StackTrace sulla GUI quando il programma va in crash. Ho implementato questo in Java, sostituendo System.err con il mio gestore di errore, che reindirizza tutti i messaggi di errore a un componente GUI e un file di testo.

Il problema: poche librerie là fuori (ad esempio Apache POI) Non basta scrivere a System.err quando si verifica un crash, ma anche semplici messaggi di avviso di uscita. Questo fa sì che la finestra di schianto a pop-up inutilmente. Quindi la mia domanda è, qualcuno sa come (1) mostrano la stacktrace quando il programma va in crash, mentre (2) che non presentano in caso di messaggi di avviso?

[Modifica] La mia GUI è scritto in SWT.

È stato utile?

Soluzione

È possibile installare propri gestori di eccezioni. Una tecnica per di un'altalena spiegata qui: http : //ruben42.wordpress.com/2009/03/30/catching-all-runtime-exceptions-in-swing/ . Eric Burke ha anche bell'articolo su questo argomento . Un'altra tecnica generale sta usando Thread.setDefaultUncaughtExceptionHandler , che viene chiamato quando muore filo dovuta ad eccezione (secondo i commenti nell'articolo primo riferimento, filo battente non muore, così modificando gestore eccezioni non rilevate non funziona per battente , ma l'articolo di Eric utilizza questa tecnica).

Il gestore di eccezioni può quindi visualizzare l'errore, log, o fare tutto quello che vuoi, senza preoccuparsi di altro codice utilizzando i flussi di uscita / errore standard.

Altri suggerimenti

credo che tu stia avvicinando il problema dal punto di vista sbagliato. Si dovrebbe essere spuntando una finestra quando ci sono delle eccezioni, non solo quando c'è l'uscita per System.err. System.err è più simile a un programma di utilità di registrazione.

Per tutte le eccezioni controllate, si dovrebbe gestirli caso per caso nel codice. O apparire una finestra di dialogo, li log, o ignorarli (ma in tal caso, essere sicuri che è davvero sicuro di farlo)

Per catturare tutte le eccezioni non verificate rimanenti, si può fare qualcosa di simile: http: // www .javaspecialists.eu / archive / Issue081.html , per assicurarsi che stai ricevendo quelli.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top