Ad vyjímky: ok jsou tam cekem minimálně dvě vyjímky, měl bych tedy odchytit každou zvlášť. JENŽE. Co když používám metodu nějaké knihovny X, která sice vyhazuje vyjímku A, ale používá další metodu Y, Z, které vyhazují vyjímky B a C. Nemůžu přece pořád prohledávat celý strom a sledovat, co všechno můžu potencionálně zachytit, až mi to nahoru probublá. Proto na to prostě prdím a používám Exception.
Od toho jsou v Javě dva druhy výjimek, kontrolované (dědí přímo z Exception) a nekontrolované (dědí z RuntimeException). To, že metoda může vyhodit kontrolovanou výjimku, je součástí její deklarace. Když tu metodu voláte, musíte příslušnou výjimku buď zachytit a ošetřit, nebo také vaše metoda musí deklarovat, že danou výjimku může vyhodit.
Takže nemusíte prohledávat žádný strom volání. Stačí se naučit základy a pak programovat správně.
Ad awt vlákno: ten dialog s IP adresou je dialog, který vrací hodnotu jako funkce. Když ho nechám rozběhnout se v samostatném vlákně, nevrátí mi žádnou hodnotu - tedy ne tak jednoduše, musel bych to asi řešit zase přes eventy
Problém je hlavně v tom, že matláte všechno dohromady. Swing je od začátku postaven tak, aby se používal v MVC. Ale samozřejmě k tomu nedokáže autora donutit.
Funkce vracející hodnotu nemá být volána v AWT vlákně, ale ve výkonném kódu. Ten si klidně může čekat, až se funkce vrátí, a nebo můžete použít lambdu, která se spustí v okamžiku, kdy funkce získá hodnotu. Ve spoušti události tlačítka, která se provádí v AWT vlákně, nemá být žádný výkonný kód – má tam být pouze nastavení GUI do stavu, ve kterém se bude provádět nějaká činnost (tj. zamezení vstupu do všech ovládacích prvků a aktivace jediného ovládacího prvku, který umožní přerušit prováděnou akci), pak spuštění výkonného kódu v samostatném vlákně a pak provedení akce po dokončení výkonného kódu. Ve standardní knihovně je na to minimální podpora ve třídě SwingWorker, případně pro to zase existují knihovny. A celé by to pokud možno mělo být součástí nějakého controlleru, ne špagety ve formuláři.
a to je zase psaní navíc
Ano, napsat program pořádně je vždy psaní navíc. Program, který běží při dobré konstelaci hvězd na počítači autora a autor jej mistrně ovládá a neklikne vedle, což by způsobilo okamžité zhroucení programu, je vždy podstatně jednodušší. Akorát je snaha takové prasomátory nepouštět moc blízko k PC, protože napáchají víc škody, než užitku.
Druhá věc: když mi vyskočí dialog se zadáním IP adresy a portu, okno pod ním zamrzne. Ale to je přece normální a já to tak chci, že aktivní je aktuální okno a na to pod ním nejde klikat.
Jenže vy způsobíte to, že zamrzne i ten samotný dialog. Nejde zavřít, nejde přesunout, nejde s ním udělat nic. Vy to tak možná chcete, ale nechce to tak žádný uživatel.
Ale zase na druhou stranu, co má dělat? Je přece dobře, že když probíhá zpracovávání něčeho, nebude se na něj dát klikat.
To, že se nedá klikat na obsah dialogu, je něco úplně jiného, než že vám zamrzne GUI celé aplikace a ani ji neodkážete ukončit. Navíc zrovna při vyvolání síťové operace by uživatel měl mít možnost operaci přerušit, protože když vytrhne síťový kabel, ví sám velice dobře, že to nedopadne, a chtěl by překlad sám ukončit – a nečekat třeba 30 sekund nebo 2 minuty, než vyprší timeout na překlad a zjistí i aplikace, že to nejde.