• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

JAVA - zgłaszanie wyjątków

Object Storage Arubacloud
+1 głos
450 wizyt
pytanie zadane 8 sierpnia 2020 w Java przez CupraR225 Początkujący (270 p.)

Siemka, czy jest możliwe raz a porządnie zgłosić wyjątek w metodzie, mam na myśli czy metoda  która posiada funkcje które wymagają obsługę jakiegoś wyjątku może mieć jakąś instrukcje która umożliwi nie obsługiwanie tych wyjątków w metodach wywołujących tą metodę, dla przykładu:

public class Main {
	Main() throws InterruptedException {
		method1();
	}
	public static void main(String[] args) throws InterruptedException {
		new Main();
	}
	public void method1() throws InterruptedException {
		method2();
	}
	public void method2() throws InterruptedException {
		Thread.sleep(1000);
		System.out.println(".");
	}
}

Jedna mała funkcja wymaga obsługę wyjątku InterruptedException a przez to że jest wywoływana przez inne funkcje wszystkie muszą obsługiwać ten wyjątek a gdyby tylko dało się zrobić coś na zasadzie

public void method2() {
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			System.exit(0);
		}
		System.out.println(".");
	}

to nie byłoby szans wystąpienia wyjątku w metodzie1 tylko że takie rozwiązanie dalej wymaga obsłużenia wyjątków w tej metodzie

a w moim konkretnym problemie mam metode actionPerformed (listener) która nie pozwala sobie dopisać "throws InterruptedException" i pozostaje jedynie opcja z try catch ale problem rodzi się taki że wtedy funkcje nie wykonują się na bieżąco tylko try catch wykonuje niektóre instrukcje tak jakby w pamięci i realizuje je dopiero gdy cały blok try catch nie napotkał błędu co powoduje że program

public class Main {
	Main() throws InterruptedException {
		method1();
	}
	public static void main(String[] args) throws InterruptedException {
		new Main();
	}
	public void method1() throws InterruptedException {
		method2();
		button1.setIcon(icon2);
	}
	public void method2() {
		try {
			button1.setIcon(icon1);
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			System.out.println("error");
		}
		System.out.println(".");
	}
}

ani na chwile nie przypisuje przyciskowi obrazka1 bo jest przy zakończeniu operacji try catch automatycznie bez czekania nadpisany przez obrazek2

Czy da radę to jakoś rozwiązać czy może ja źle korzystam z obiektowości javy?

1 odpowiedź

0 głosów
odpowiedź 8 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
wybrane 8 sierpnia 2020 przez CupraR225
 
Najlepsza

Nie ma innej drogi.
Jednak nie jest to dobrze napisane, twój problem wynika z łamania jednej z podstawowych zasad z akronimu SOLID- chodzi mi o pojedynczą odpowiedzialność i tutaj " pojedynczą odpowiedzialność" ograniczamy do zasięgu metod.
Jedna metoda- wykonywać powinna jedno konkretne jej działanie, a nie być silnie zależna od pozostałych metod.

 

zresztą obsługe masz w 1 metodzie, natomiast pisząc 

 Main() throws InterruptedException {
        method1();
    }

dajesz tylko informacje, link kompilatorowi że w hierarchii może wystąpić wyrzucenie błędu . To też dobra informacja dla programisty jest 

komentarz 8 sierpnia 2020 przez CupraR225 Początkujący (270 p.)
Hm, ale jakbym wsadził wszystkie metody do jednej metody actionPerformed to musiałbym ustawić sporo if'ów oraz za każdym razem program musiałby je sprawdzać co akurat tym razem chciałbym zrobić
komentarz 8 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
No właśnie masz robić tak, żeby nie  powodować zależności to klasa ma zarządzać swoimi metodami, a nie metoda- metodą.
I nie musiałbyś stosować tyle ifów :) kwestia implementacji i właśnie myślenia algorytmicznego, nie znam stadium przypadku więc nie doradze
1
komentarz 8 sierpnia 2020 przez CupraR225 Początkujący (270 p.)
No ok dzięki następne programy postaram się robić uwzględniając tą zasadę
komentarz 8 sierpnia 2020 przez Wiciorny Ekspert (270,190 p.)
w razie czego, jeśli bardzo potrzebujesz pisz po prostu na priv bo bez spojrzenia na kod, dowiedzenia się co jest twoim zamiarem etc. nie mam szans dobrze Ci doradzić, a tak tylko daje Ci praktyczne i dobre wskazówki !

Podobne pytania

0 głosów
2 odpowiedzi 264 wizyt
pytanie zadane 27 lipca 2016 w PHP przez mus Użytkownik (700 p.)
0 głosów
1 odpowiedź 138 wizyt
pytanie zadane 26 lipca 2016 w PHP przez mus Użytkownik (700 p.)
0 głosów
1 odpowiedź 317 wizyt
pytanie zadane 23 lipca 2016 w PHP przez mus Użytkownik (700 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...