Avatar billede hankster Nybegynder
10. december 2001 - 22:20 Der er 11 kommentarer og
2 løsninger

håndtering af exceptions

Hej.

Jeg har i to funktionslag. et funktionslag til at skrive oplysninger i en fil, og et funktionslag til at skrive i en database.

i disse funktionslag kan der forekomme en masse forskellige exceptions.

SQLexceptions (ingen forbindelse til server), IOexceptions (fejl i at skrive i fil) mm.

Disse exceptions vil jeg gerne have vist som noget fornuftigt på grænsefladen, evt. i en dialogbox.

Jeg er klar over at man kan lade funktionsklasserne \"throw\" disse exceptions videre til grænsefladen som har kaldt klasserne, lade grænsefladen opfange dem, hvorefter man kan smide dem i en:

JOptionPane.showMessageDialog(frameNavn, ExceptionTekst);

men så er grænsefladen nødt til at kende alle de exceptions-typer som den kan risikere at få.

Mine spørgsmål er:

Er der ikke en lettere måde at gøre det her på?
Kan man generere en dialogbox fra en klasse uden frame?
Kan man fra grænsefladen hente funktionslagenes exceptions på en anden måde?
Avatar billede greybeard Nybegynder
10. december 2001 - 22:31 #1
Du kan bruge dialogboksen alle steder fra, når bare du har importeret javax.swing.
Hvad med noget i den her stil:
}catch (Exception e){
    JOptionPane.showMessageDialog(\"Der er sket en fejl\", e.getMessage());
}
Avatar billede hankster Nybegynder
10. december 2001 - 22:35 #2
som jeg læser hjælpen på sun.com

så skal den have en parentComponent dvs. en frame at knytte sig til... er det forkert?
Avatar billede tille Nybegynder
10. december 2001 - 22:36 #3
parent kan godt være null
Avatar billede greybeard Nybegynder
10. december 2001 - 22:39 #4
Undskyld, det var noget vrøvl, jeg skrev. Jeg siider og roder med C#.
Men hvis du bruger e.getMessage(), har du i hvert fald ikke nøde at kende alle fejl på forhånd
Avatar billede hankster Nybegynder
10. december 2001 - 22:56 #5
er der en der i samme omgang kan forklare mig hvad man kan bruge den her til:

printStackTrace()
Avatar billede tille Nybegynder
10. december 2001 - 22:58 #6
Greybeards svar var nu ikke galt

Jeg har skrevet min egen dialog \'fabrik\' som kan lave alle beskeder, og håndtere tekster hentet ud fra databaser hvori brugerne har defineret hvad teksten skal være og hvad der skal stå på knapperne.
Dene klasse har en masse statiske metoder f.eks. visFejlBesked som tager en streng eller en component og en streng, dette sendes så til en standard JOptionPane.showOptionDialog. (hvis ingen ejer er første parameter null)

feks. sådan her:
catch (Exception e){
DialogFactory.visFejlBesked( e.getMessage());
}


hvis du absolut vil have en ejer til dialogen, kan du jo lave en statisk metode på den yderste frame i dit hierarki, som kan returnere sig selv i en metode der hed getTopFrame().
Avatar billede greybeard Nybegynder
10. december 2001 - 23:00 #7
Den bruges til at udskrive hvilke metodekald, der har har været for at komme til det sted, hvor fejlen opstår. På den måde kan man spore sin fejl baglæns, og findde ud hvorfor den opstår. Det er den udskrift du også får fra en EXception, der ikke catches.
Avatar billede tille Nybegynder
10. december 2001 - 23:01 #8
Jeg forstår sikkert ikke hvad du mener men printStackTrace printer backtrace (altså funktionskaldetræet) for den fejl du har i hånden til standard error stream, printer writer eller printer stream
Avatar billede greybeard Nybegynder
10. december 2001 - 23:10 #9
Tille:
Det var det jeg mente, men din måde at udtrykke det på er vist mere præcis.
Den er også god til debugging, bare med skærmudskrift. Også på de exceptions man fanger.
Avatar billede tille Nybegynder
10. december 2001 - 23:12 #10
jeg tror mit svar var lidt utyeligt, men det jeg mente var blot at man godt kan sige:
JOptionPane.showOptionDialog(null, \"OK\", \"Fejl\",DEFAULT_OPTION, WARNING_MESSAGE,null, options, options[0]);
Avatar billede hankster Nybegynder
10. december 2001 - 23:15 #11
ja eller:

JOptionPane.showMessageDialog(null, \"fejl\");


hvorfor gør det mere besværligt end det er?

;o)

Jeg splitter pointene imellem jer.
Avatar billede tille Nybegynder
10. december 2001 - 23:19 #12
takker og du har da ret, hvorfor gøre det mere besværligt end det er, men jeg tog en kopi fra min dialogfactory, og der kan alle parametre angives, enten af de statiske metoder, eller af klassen selv udfra tekststrengene i databasen.


Avatar billede greybeard Nybegynder
10. december 2001 - 23:23 #13
Tak :-)
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester