Naposledy aktualizováno:
2015-02-10 – 20:40:53
Generátor projektů je v souboru
UOA-2_Java8_v8.05.5199_2015-02-10.jar.
V názvu souboru je vždy je uvedeno číslo verze doplněné datem jejího vzniku.
Počáteční osmička říká, že se jedná o doprovodné programy ke knize o Javě 8,
další dvojčíslí pak specifikuje podverzi,
následující čtyřčíslí označuje interní číslo verze v mém správci verzí
a na závěr názvu je uvedeno datum vzniku daného souboru.
Pokud vám nebude ve vašich programech něco fungovat, podívejte se sem,
jestli na podobný problém nenarazil už někdo před vámi
a jestli proto není k dispozici novější verze.
Balík doprovodných programů je uložen jako samorozbalovací archiv,
který je naprogramován v jazyku Java, takže vyžaduje,
abyste již měli na svém počítači Javu instalovánu.
Další podmínky na vás neklade.
Archiv spustíte obdobně jako jiné programy,
tj. povětšinou poklepáním na příslušný soubor.
Po jeho spuštění se otevře dialogové okno (viz obrázek),
v němž zadáte vše potřebné a spustíte generaci požadovaných doprovodných programů.
Máte-li na počítači instalovaný nějaký (většinou komprimační) program,
který se prohlásí za "vlastníka" JAR-souborů,
nemusí vám dovolit spustit JAR-soubor poklepáním.
Bude-li proto váš počítač trucovat
a bude odmítat JAR-soubor jednoduše spustit,
zkuste program spustit z příkazového řádku zadáním příkazu:
java -jar <cesta-k-Jar-souboru>
V některých operačních systémech, např. ve Windows,
nemusíte dokonce ani zadávat celou cestu k souboru,
ale stačí pouze přetáhnout soubor do okna příkazového řádku
a systém cestu na konec aktuálního příkazového řádku sám doplní.
Ovládání generátoru je jednoduché.
Po spuštění souboru se otevře dialogové okno,
v němž do vstupního pole Cílová složka: zadáte cílovou složku,
do které se mají vygenerované projekty ukládat (složka musí existovat).
Nemáte-li odkud její adresu zkopírovat a nechce-li se vám vypisovat,
můžete stisknout tlačítko Procházet ...
a složku najít, resp. vytvořit prostřednictvím dialogového okna.
Pod vstupním polem je seznam s názvy projektů, které je možno vygenerovat.
Projekty vybíráte klepnutím myši. Chcete-li jich vybrat více,
můžete využít přeřaďovačů CTRL a SHIFT, které zde fungují standardně.
Chcete-li vybrat všechny projekty, stačí pod seznamem stisknout tlačítko
Generovat všechny.
Po zadání cílové složky a seznamu generovaných projektů
stiskněte tlačítko OK
a během chvilky se v zadané cílové složce požadované projekty objeví.
V učebnici vám ukazuji, jak můžete převzít moji konfiguraci NetBeans.
Nastaveními pro prostředí NetBeans, o němž se hovoří ve druhé kapitole,
je v souboru
NBSetting_UOA2_J8_v8.0.2.5164_2015-01-18_RUP.zip.
Zásuvný modul (plugin) vyžadující vaše potvrzení před zavřením programu
a bránící tak nechtěnému zavření (a hlavně zdlouhavému následnému otevírání) IDE
při nechtěném stisku zavíracího tlačítka nebo nějaké jiného příkazu
zavírajícího celou aplikaci
je uložen v souboru
close_verification.nbm.
Přes veškeré kontroly se do knihy vloudilo pár chybiček.
Zde jsou opravy těch, na něž jsem přišel já nebo čtenáři
(většinu z nich objevil Rostislav Bodorik, kterému za to velmi děkuji).
Důvodem některých nepřesných popisů je také fakt, že od vydání knihy vyšlo
několik inovovaných
verzí prostředí NetBeans, a v nich se některé příkazy
a nastavení zadávají trochu jinak.
Pasáže, které budou v následujících opravách vysazeny kurzivou, mají pouze
vysvětlující charakter,
a nejsou určeny k vyhledání v textu či k náhradě původního textu.
System.exit(0);Přidejte jej proto na konec těla vytvářené metody.
System.exit(0)
public Vehicle(int column, int row, NamedColor bodyColor, NamedColor arrowColor) { int m1 = CM.getStep(); int x = m1 * column; int y = m1 * row; int m2 = m1 / 2; int m4 = m1 / 4; Rectangle back = new Rectangle(x, y, m2, m1, NamedColor.RED); Ellipse nose = new Ellipse (x, y, m1, m1, NamedColor.RED); Rectangle arrBody = new Rectangle(x, y+m4, m2, m2, NamedColor.BLACK); Triangle arrHead = new Triangle (x+m2, y, m2, m1, NamedColor.BLACK, Direction8.EAST); body = new Multishape(back, nose, arrHead, arrBody); }
/** Zpravodaj zprostředkující odsazovaný tisk na standardní výstup. private static final IndentingReporter IR;>
/** Zpravodaj zprostředkující odsazovaný tisk na standardní výstup. */ private static IndentingReporter IR;
public Ring(Position startField, int length, NamedColor color) { firstSegment = new SegmentEast(position, length, color); multishape.addTheShape(firstSegment); }
public Ring(IRingSegment startSegment, Multishape multishape) { this.startSegment = startSegment; this.multishape = multishape; }
public void startWith(IRingBuildSegment startSegment)
public RingBuilder startWith(IRingBuildSegment startSegment)
public IRingBuildSegment appendRight(int length)
public RingBuilder appendRight(int length)
Tato sekce je určena pro odpovědi na vaše nejčastější dotazy.
Na počátku jsou dotazy, které se netýkají přímo vykládané látky,
ale jsou zaměřeny na některé související záležitosti:
instalaci JDK, NetBeans, konfiguračního doplňku a doprovodných programů,
některé vlastnosti NetBeans, apod.
Za nimi jsou pak dotazy k textu knihy.
Ty jsem seřadil podle stránek, na nichž se nachází text,
při jehož studiu se objevily nejasnosti.
Budete-li mít nějaký dotaz, ať už k látce či prostředí, pošlete mi
mail
s předmětem začínajícím UOA2_J8_Dotaz:
Bude-li se dotaz týkat něčeho obecnějšího,
zveřejním zde odpověď i pro ty ostatní.
Dotaz:
Po načtení projektů NetBeans hlásí, že jsou v nich chyby.
Odpověď:
Problémy některých z vás by mohly zapříčiněny tím,
že máte vedle Javy 8, kterou se chcete prostřednictvím knihy naučit,
instalovány i starší verze Javy a vaše NetBeans
nepovažují Javu 8 za implicitní verzi používané platformy.
Doprovodné programy pak sice budou dál provozovatelné,
ale bude třeba upravit jejich vlastnosti a vysvětlit jim,
že používají jinou platformu, než tu implicitní.
Bude-li někdo chtít podrobněji vysvětlit, jako se to dělá
napište.
Pokud NetBeans hlásí chyby až u projektů pro kapitolu 6 a další,
mohla by být chyba v tom, že máte špatně instalovanou knihovnu
CanvasManager.
Dotaz:
Při spouštění projektů NetBeans hlásí, že nemohou najít hlavní třídu,
přestože tato třída existuje a překladač ji bez problému přeložil.
Odpověď:
U některých verzí NetBeans nefunguje dokonale automatický překlad
ukládaných souborů.
Překladač je sice úspěšně uloží, ale NetBeans si tuto skutečnost
špatně zapamatují.
Otevřete proto okno s vlastnostmi projektu
(viz kapitolu 3.9 Vlastnosti projektu, strana 97, obrázek 3.14)
v něm otevřete stránku Compiling a na ní
zrušte zaškrtnutí políčka Compile on Save.
Dotaz:
Když podle popisu v pasáži Vynechání konkrétního testu
na straně 124
odkomentuji anotaci @Ignore, program ochláší chybu:
error: cannot find symbol @Ignore symbol: class Ignore location: class ElevatorTest
Odpověď:
Když použijete jakýkoliv nový datový typ z jiného balíčku,
musíte uvést jeho plný název, anebo jej importovat.
To platí i pro anotace, které jsou pouze zvláštním druhem interfejsů.
Dotaz:
Třída Robot je implementací interfejsu IVehicle,
který je potomkom interfejsu IModular.
To implementují i třídy RobotEast, atd. protože implementují interfejs IRobot1,
jenž je jeho potomkem .
Když má ale stavová část objektu plnit pouze ty funkce, které jsou závislé na změně stavu,
tak by se v ní ale nic takového nevyskytovat němělo.
V našem případě by např. metoda getModule() měla být ve třídě Robot
a ne ve třídě RobotEast, atď.
Takto musí třída Robot vědět o implementačních detailech svého stavu.
Jak by sa to mělo správne navrhnouť?
Odpověď:
Otočný robot (a obecněji vozidlo) musí být schopen prozradit a nastavit
svoji pozici a velikost.
Nejjednodušším řešením je v našem případě to, že tuto povinnost deleguje
na svůj aktuální jednostavový podobjekt.
Aby toho byl tento podobjekt schopen, nezbývá nám, než jej definovat
jako instanci potomka interfejsu IModular.
Obecně neplatí, že jednostavový objekt má definovat pouze stavově závislé funkce.
Má za úkol definovat stavově závislé chování, a k tomu občas potřebuje umět i takové věci,
které samy o sobě se změnou stavu bezprostředně nesouvisejí.