Obsluga wyjatkow

Odpowiedz Nowy wątek
2010-07-29 17:30
iluminacja
0

Fragment kodu:

try{

cos tam
}

catch(Wyjatek 1)
{
cos co moze zwrocic wyjatek
}
catch(Exception x)
{
cos tam;
}

I teraz takie pytanie: w jaki sposob zrobic, by to co moze sie sypnac w pierwszym catchu przechwyci catch(Exception x)? Bo pisanie w catchu kolejnego try-catch strasznie mi sie nie podoba ;] Mam nadzieje, ze ktokolwiek rozumie o co mi chodzi

Pozostało 580 znaków

2010-07-29 18:07
0

nie można tak zrobić. catch wyłapuje wyjątki tylko z bloku try z którym jest związane.

Pozostało 580 znaków

2010-07-29 19:56
0

W catch raczej nie powinieneś robić ryzykownych instrukcji które mogą rzucić wyjątek, ale jeśli już musisz to musisz normalnie ten wyjątek obsługiwać za pomocą try i catch, nic na to nie poradzisz ze ci urośnie taka piramidka z tego.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

2010-07-30 14:27
0

Jest nawet gorzej. Rzucony w bloku catch wyjątek zastąpi wcześniej rzucony wyjątek (zwykle ten ważniejszy). A przynajmniej tak było do wersji 1.6. (bug javy 1.5 i wcześniejszych).
Generalna zasada jest taka aby kod zamknięty w catch nie mógł spowodować żadnego wyjątku, nawet banalnego.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2010-07-30 16:11
0
Olamagato napisał(a)

Generalna zasada jest taka aby kod zamknięty w catch nie mógł spowodować żadnego wyjątku, nawet banalnego.

To zapytam z ciekawości. Co mam zrobić, jeżeli złapałem wyjątek i teraz chcę zapisać informację o błędzie do pliku? Przecież zapisywanie też może rzucić przykładowo IOException.

Pozostało 580 znaków

2010-07-30 19:44
0

Przecież wyjątek i zrzut stosu możesz zapisać do dowolnej lokalnej zmiennej lub dowolnego pola obiektu na stercie. I odpowiednio go wykorzystać lub ponownie rzucić w odpowiednim momencie.

Co prawda przy dużym pechu, w każdym momencie może się też zdarzyć OutOfMemoryException, ale to już sytuacja skrajna bo takie wyjątki łapią tylko paranoicy jak ja ;) lub tacy, którzy za swój soft biorą bardzo grubą kasę.


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2010-07-30 21:13
::.
0

Powiedz ze zartujesz z tym OutOfMemory, prosze...

Pozostało 580 znaków

2010-07-30 22:43
0
Olamagato napisał(a)

OutOfMemoryException
Nie przypadkiem OutOfMemoryError ?

Pozostało 580 znaków

2010-07-31 11:53
0

A tak, oczywiście. "Exception" było z rozpędu. :)
@::. To oczywiście żart bo w przetestowanym sofcie nic takiego się nie sprawdza. Chociaż dobrze jest jak aplikacja jest w stanie monitorować ilość pamięci, którą ma do dyspozycji. Pomijając już to, że Errorów nie łapie się z założenia. :)


Jeżeli ktoś komuś coś, ewentualnie nikt nikomu nic, to właściwie po co...?

Pozostało 580 znaków

2010-07-31 12:38
0
Olamagato napisał(a)

Pomijając już to, że Errorów nie łapie się z założenia. :)

Oczywiście że się łapie z założeniem...niekiedy jedynym sposobem na "poprawne sterowanie" jest celowe wyłapywanie wyjątków. Najprostrzy przykład: masz sobie sockecik już po połączeniu i nagle klient się wyłącza i dostajesz java.net.SocketException: socket closed i już wiesz ze musisz znowu przejsć w stan nasłuchu. Jakbyś to zrealizował niby "nie łapiąc z założenia"? A różnicą jest, czy dostaniesz socket close czy connection reset i tak mozęsz sterować programem.

Pozdro

PS: No i jeszcze przeciez sami możemy sobie stworzyc klasę co będzie dziedziczyć po Exception i tam sobie możemy popisać różne bzdurki jakie chcemy. Np. bedzie metoda trescaOstatniegoBledu, która nam wyłapie czy błąd był w pierwszym catchu czy w drugim i napisze jego treść.


Another jam from the world for the jam from the voices of the world......

Pozostało 580 znaków

2010-07-31 12:52
0

Olamagato nie chodziło o wyjątki (klasa Exception) tylko o "errory" (klasa Error), których rzeczywiście nie powinno się wyłapywać:
http://download.oracle.com/ja[...]docs/api/java/lang/Error.html

@down poprawione :)

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0