12. januar 2005 - 12:54Der er
27 kommentarer og 1 løsning
Kast Exceptions fra Innerclass
Hej Eksperter, jeg benytter swingworker klassen i min gui, den kalder nogle metoder som smidder en masse exceptions. Nu er jeg så ved at lave noget exceptions handling, og det skaber nogle problemer da jeg ikke fanger exceptions inde i selve construct() men længere ude. Det mener min compiler ikke at jeg må så hvad gør jeg så?
try { andre iffer.... if(source == jButtonValidate) { final SwingWorker worker = new SwingWorker() { public Object construct() { //denne linie smidder en masse exceptions jctl.ctlValidate(jTextFile.getText(), (Template)jComboTemplates.getSelectedItem()); jButtonMakeScript.setEnabled(ctl.ctlGetValidatedStatus()); jEditorPaneMsg.setCaretPosition(0); jProgressBar1.setIndeterminate(false);
try { andre iffer.... if(source == jButtonValidate) { final SwingWorker worker = new SwingWorker() { public Object construct() { //denne linie smidder en masse exceptions jctl.ctlValidate(jTextFile.getText(), (Template)jComboTemplates.getSelectedItem()); jButtonMakeScript.setEnabled(ctl.ctlGetValidatedStatus()); jEditorPaneMsg.setCaretPosition(0); jProgressBar1.setIndeterminate(false);
try { andre iffer.... if(source == jButtonValidate) { final SwingWorker worker = new SwingWorker() { public Object construct() { //denne linie smidder en masse exceptions jctl.ctlValidate(jTextFile.getText(), (Template)jComboTemplates.getSelectedItem()); jButtonMakeScript.setEnabled(ctl.ctlGetValidatedStatus()); jEditorPaneMsg.setCaretPosition(0); jProgressBar1.setIndeterminate(false);
Jo nok fordi jeg klippede det sammen. min compiler besked:
script/gui/Form.java [366:1] unreported exception java.io.IOException; must be caught or declared to be thrown jEditorPaneMsg.setText(ctl.ctlValidate(jTextFile.getText(),(Template)jComboTemplates.getSelectedItem())); ^
det lyder som om det er fordi der en metode som kalder på noget som kan lave exceptions.. den metoder som kalder skal lige have en throws Exception.. hvis du gør det i main som jeg skrev før så mener jeg ikke den gør det mere.. medmindre fejlen er noget andet!
Tjae men problemet er at metoden som kaster exceptions er i en indre klasse SwingWorker så hvordan kan jeg sætte den til at kaste videre? eller kan man ikke det, for så må jeg lave strukturen om.. :-(
script/gui/Form.java [366:1] unreported exception java.io.IOException; must be caught or declared to be thrown jEditorPaneMsg.setText(ctl.ctlValidate(jTextFile.getText(),(Template)jComboTemplates.getSelectedItem()));
var din oprindelig fejl.. og du mangler thrown (har de med på det link jeg fandt.. kunne nemlig ikke finde klassen i API'et)
Problemet er at SwingWorker construct ikke er erklæret til at throwe nogen exception.
Jeg kan se 3 mulige løsninger:
1) du catcher exception i construct (kan være uhensigtsmæssig)
2) du retter SwingWorker construct så den thrower en Exception + alle de nødvendige konsekvens rettelser i SwingWorker (en del arbejde og måske ikke så pænt) og lader så din construct implementation throwe en Exception
3) du thrower en unchecked exception altså en exception som extender RuntimeException
og #3 virker meget fint.
Men men men ...
Den exception bliver jo ikke catchet i din tråd, fordi den kode køres i en separat tråd.
snoop_one -> det ser jo lovende ud kan man ikke smide exceptionen videre her: if (worker.get() instanceof Exception) { Throwable exp = new InvocationTargetException( (Exception) worker.get()).getTargetException(); System.out.println("The Exception was a: " + exp + "\n\twith this message: "+ exp.getMessage()); }
Så kan man ikke sige throw (Exception) worker.get(); ?
Jo altså du kan jo lave den på denne måde hvor du tager dig af exception handling et andet sted, men ved ikke hvor god idé det er? (tegn på design fejl!):
Har lavet mit design om så jeg slipper for denne problematik så kan folk ikke smide et svar. Og tak for hjælpen.
Og undskyld det har taget så lang tid havde glemt dette spørgsmål. Dette kunne være sejt med en slags reminder funktion her på eksperten eller en 'time to live' på sine spørgsmål..
Ja det var oxo hans løsning jeg næsten fik til at virke.. så værsgo
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.