all
Programování v Java 1 - cvičení
Odkazy na jednotlivá cvičení jsou v systému lms.vsb.cz.
Informace pro dálkové studium
Podmínky získání zápočtu
Získat alespoň 20 bodů z 45 možných bodů. Body jsou udělovány za:
- domácí úlohy až 10 bodů (minimálně 1);
- zápočtové testy až 35 bodů (minimálně 1).
Zápočtové testy se budou psát dva a termín bude domluven na tutoriálu.
Domácí úlohy
Zpracované úkoly vkládejte do systému LMS - https://lms.vsb.cz/course/view.php?id=64819 - sekce "Domácí úlohy". Dodržte uvedené termíny. Po termínu úlohu již nelze vložit.
Projekty studentů - rok 2014
Na této stránce jsou vybrané projekty studentů předělané do podoby Java Web Start aplikací nebo Java appletu. Původně tyto projekty byly vytvořeny jako "desktopové" aplikace, takže jejich vzhled a chování v podobě appletů může být v horší oproti originální odevzdané formě.
Pokud Vám neběží Java Web Start aplikace, tak postupujte podle popisu zde.
Arkanoid - 1
autor: přál si zůstat v anonymitě
Dáma- 1
autor: Petrskovský Jan
Frogger - 1
autor: Kubiš Lukáš
Go - 1
autor: přál si zůstat v anonymitě
Minesweeper - 1
autor: Bartoš Václav
Pexeso - 1
autor: Hub Michal
Piškvorky - 1
autor: Vavera Filip
Skořápky - 1
autor: přál si zůstat v anonymitě
"Space Invaders" - 1
autor: Hrtús Daniel
Sudoku - 1
autor: Trlifaj Ondřej
Ukázky případů užití
Příklady případů užití převzaté z knihy: "COCKBURN, Alistair, 2001. Writing effective use cases. Boston: Addison-Wesley. ISBN 0201702258 9780201702255."
Jednoduchý sytémový případ užití na úrovni uživatelského cíle
Podnikový případ užití na souhrné úrovni
Podsystémový případ užití na úrovni uživatelského cíle
Podnikový případ užití na souhrné úrovni
Komplexní systémový případ užití na úrovni uživatelského cíle
Známé problémy a jejich řešení
GUI nereaguje, jak by se čekalo, ve verzi Javy 1.8
Problém se projevuje tím, že GUI programu se zasekne a nereaguje na akci, která měl způsobit pokračování, a toto se navíc děje pouze v případě, že program je spuštěn ve verzi Javy 1.8. Ve verzi 1.7 to jede. Tento problém se objevuje, pokud máte pozastaveno vykonávání kontrolního toku programu pomocí prázdné smyčky:
while (some_variable == SOME_CONST) { }
Příčina
Důvod tohoto chování je objasněn zde https://stackoverflow.com/questions/8409609/java-empty-while-loop
Řešení
Možné řešení je nastíněno ve výše zmíněném odkazu - u proměnných, na jejichž změnu se čeká v prázdném cyklu, použít klíčové slovo volatile. Nicméně čekání pomocí prázdné smyčky je neefektivní a zbytečně zatěžuje procesor. Ideální řešení je čekat pomocí synchronizačních mechanismů wait a notifyAll - detailně to je vysvětleno zde https://docs.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html.
Kód, který má počkat, než se nastaví hodnota proměnné na požadovanou hodnotu vypadá nějak takto:
synchronized (ref_of_monitor) { while (some_variable == SOME_CONST) { try { ref_of_monitor.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } }
Kód, který modifikuje hodnotu testované proměnné (na jiném vlákně), vypadá nějak takto:
synchronized (ref_of_monitor) { some_variable = SOME_CONST; ref_of_monitor.notifyAll(); }
Pokud jste nebyly schopni tuto věc vyřešit výše zmíněným ideálním způsobem, tak stačí do původního cyklu, který způsoboval problém, vložit nějakou drobnou prodlevu:
while (some_variable == SOME_CONST) { try { Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } }
Procesor bude sice stále zatěžován zbytečným čekáním, ale mnohem méně.