Programovanie (2) v Jave
1-INF-166, letný semester 2023/24

Prednášky · Pravidlá · Softvér · Testovač
· Vyučujúcich predmetu možno kontaktovať mailom na adresách uvedených na hlavnej stránke. Hromadná mailová adresa zo zimného semestra v letnom semestri nefunguje.
· JavaFX: cesta k adresáru lib je v počítačových učebniach /usr/share/openjfx/lib.


Letný semester, softvér: Rozdiel medzi revíziami

Z Programovanie
Skočit na navigaci Skočit na vyhledávání
Riadok 89: Riadok 89:
 
== Skompilovanie a spustenie programu v JavaFX ==
 
== Skompilovanie a spustenie programu v JavaFX ==
  
=== Z príkazového riadku ===
+
Ukážeme si teraz, ako z príkazového riadku a v IntelliJ IDEA skompilovať a spustiť nasledujúcu triedu pracujúcu s JavaFX, ktorá by mala zobraziť okno s titulkom <tt>Hello, World!</tt>. Táto trieda musí byť uložená v súbore <tt>HelloFX.java</tt>.
 
 
=== V IntelliJ IDEA ===
 
  
<!-- ==Verzia Javy==
+
<syntaxhighlight lang="java">import javafx.application.*;
* V učebniach a na testovači beží staršia Java SE 8, vaše programy by mali fungovať v tejto verzii.
+
import javafx.stage.*;
* Na svoj počítač si môžete nainštalovať aj novšiu verziu, napríklad Java SE 13, nemali by ste však používať črty jazyka, ktoré v staršej verzii nefungujú.
+
import javafx.scene.*;
* Prehľad verzií Javy nájdete napríklad na [https://en.wikipedia.org/wiki/Java_version_history Wikipédii], alebo na stránke [https://www.oracle.com/technetwork/java/java-se-support-roadmap.html firmy Oracle]
+
import javafx.scene.layout.*;
* Na počítač si potrebujete nainštalovať Java SE JDK, napríklad z [https://www.oracle.com/java/technologies/javase-downloads.html tejto stránky], v Linuxe môžete použiť aj balíčky openjdk.
 
 
 
==Mená súborov==
 
* V Jave musí meno súboru sedieť s menom triedy, ktorá sa v ňom nachádza a meno priečinku s menom balíčka (package)
 
* Nasledovný program musí teda byť v súbore <tt>Hello.java</tt>, ktorý je v priečinku <tt>hello</tt>
 
<pre>
 
package hello;
 
 
 
public class Hello {
 
  
 +
public class HelloFX extends Application {
 +
    @Override
 +
    public void start(Stage primaryStage) {
 +
        Pane pane = new Pane();
 +
        Scene scene = new Scene(pane, 300, 250);
 +
       
 +
        primaryStage.setTitle("Hello, World!");
 +
        primaryStage.setScene(scene);
 +
        primaryStage.show();
 +
    }
 +
   
 
     public static void main(String[] args) {
 
     public static void main(String[] args) {
         System.out.println("Hello World!");
+
         launch(args);
 
     }
 
     }
 
}
 
}
</pre>
+
</syntaxhighlight>
  
==Práca s Javou v editore==
+
V nasledujúcom <tt><cesta k lib></tt> odkazuje na cestu k adresáru <tt>lib</tt> rozbaleného ZIP archívu JavaFX, o ktorej sme sa už zmienili vyššie. Viac detailov možno nájsť [https://openjfx.io/openjfx-docs/ tu].
  
Príklad ako skompilovať a spustiť príklad Hello world vyššie pomocou editora a príkazového riadku:
+
=== Z príkazového riadku ===
* Vytvoríme adresár <tt>hello</tt>, v ňom súbor <tt>Hello.java</tt> s rovnakým obsahom ako vyššie
 
* Kompilácia <tt>javac hello/Hello.java</tt> (vznikne súbor <tt>hello/Hello.class</tt>)
 
* Spustenie <tt>java hello.Hello</tt>
 
* Pozor, meno adresára musí sedieť s menom balíčka (<tt>hello</tt>), meno súboru s menom triedy (<tt>Hello</tt>)
 
* Príkazy <tt>javac</tt> a <tt>java</tt> nespúšťame priamo v priečinku <tt>hello</tt>, ale o jednu úroveň vyššie, kam sa dostaneme príkazom <tt>cd ..</tt>
 
* Ak vynecháme riadok <tt>package hello</tt>, môžeme mať súbor <tt>Hello.java</tt> priamo v aktuálnom adresári.
 
  
==Práca s Javou v prostredí Netbeans==
+
# Nastavíme sa do priečinku obsahujúceho súbor <tt>HelloFx.java</tt>.
 +
# Triedu skompilujeme príkazom
 +
<pre>
 +
javac --module-path <cesta-k-lib> --add-modules javafx.controls,javafx.fxml Hello.java
 +
</pre>
 +
# Triedu spustíme príkazom
 +
<pre>
 +
java --module-path <cesta-k-lib> --add-modules javafx.controls,javafx.fxml Hello
 +
</pre>
  
Pri Jave odporúčame prácu v niektorom integrovanom prostredí, napríklad [http://netbeans.apache.org/ Netbeans]. Prostredie vám bude poskytovať rôzne nápovedy k menám príkazov a podobne.
+
=== V IntelliJ IDEA ===
* Najnovšia verzia Netbeans je 11.2, s podporou Java SE 13. Na svojom počítači môžete pracovať s touto verziou prostredia.
 
* V učebniach beží staršia verzia Netbeans, v kombinácii s Java SE 8.
 
 
 
'''Vytvorenie projektu pre program Hello world (v staršej verzii Netbeans v učebni)'''
 
* V menu zvolíme ''File -> New Project''
 
* Na prvej obrazovke zvolíme ''Categories: Java'' a ''Projects: Java Application''
 
* Na ďalšej obrazovke ''Project name: hello'' a ''Create Main Class: hello.Hello''
 
 
 
'''Vytvorenie projektu pre program Hello world (v novej verzii Netbeans 11.2)'''
 
* Postup je rovnaký ako vyššie, akurát v druhom kroku treba zvoliť ''Categories: Java with Ant'' a ''Projects: Java Application''
 
 
 
'''Editovanie programu'''
 
* V ľavej časti okna máte panel Projects, v ktorom nájdite projekt, ktorý ste práve vytvorili.
 
* V projekte rozbaľte '''Source Files''' a nájdete tam '''Hello.java''', ktorý si dvojitým kliknutím otvoríte v editore. Jeho obsah môžete modifikovať alebo celý zmazať a nahradiť programom Hello worlds vyššie
 
* Súbor nezabudnite uložiť (menu File, Save, alebo Ctrl-S)
 
 
 
'''Kompilovanie a spúšťanie'''
 
* V menu Run zvoľte Build main project (alebo klávesa F11 alebo '''ikonka kladivka''' na lište), program sa '''skompiluje'''. Prípadné chyby sa objavia v dolnej časti okna.
 
* V menu Run zvoľte Run main project (alebo klávesa F6 alebo '''ikonka zelenej šípky''' na lište), program sa '''spustí'''.
 
 
 
==Iné programátorské prostredia==
 
 
 
Nasledovné prostredia by mali fungovať na Linuxových aj Windowsových počítačoch.
 
* [https://www.eclipse.org/downloads/packages/release/2019-09/r/eclipse-ide-cc-developers Eclipse]
 
* IntelliJ IDEA, komerčný softvér so [https://www.jetbrains.com/student/ študentskou licenciou zadarmo], alebo zadarmo aj Community version
 
* [https://code.visualstudio.com/ Visual Studio Code] od firmy Microsoft (plus [https://marketplace.visualstudio.com/items?itemName=vscjava.vscode-java-pack Java extension] alebo [https://aka.ms/vscode-java-installer-win inštalácia pre Windows])
 
 
 
Z nich iba Eclipse je k dispozícii na učebniach v Linuxe a dá sa teda použiť na skúške.
 
 
 
==JavaFX==
 
 
 
* [[Inštalácia_novších_verzií_JavaFX|Návod na použitie JavaFX]] -->
 
 
 
<!--
 
Narozdiel od verzie JavaFX 8, ktorá bola priamo súčasťou Java SE 8, je najnovšia verzia JavaFX 14 vyvíjaná ako nezávislý modul, ktorý je potrebné nainštalovať samostatne. Nasledujúci návod popisuje inštaláciu JavaFX 14 (alebo inej novšej verzie JavaFX), jej integráciu s Netbeans 11.2 (alebo inou novšou verziou NetBeans) a úkony, ktoré je potrebné vykonať po vytvorení každého nového projektu.
 
 
 
* Podrobnejšie informácie možno nájsť [https://openjfx.io/openjfx-docs/ tu].
 
 
 
V počítačových učebniach beží staré prostredie s Java SE 8 a JavaFX 8 &ndash; vytvorenie aplikácie v JavaFX je tam teda pomerne bezproblémové (nie je nutné nič z tohto návodu).
 
 
 
Na Linuxe si môžete nainštalovať Java8 vo verzii openJDK (napr. v ubuntu balíčky openjdk-8-jdk a openjfx).
 
 
 
=== Inštalácia JavaFX 14 ===
 
 
 
* Stiahnite si [https://gluonhq.com/products/javafx/ z tejto stránky] ZIP archív obsahujúci JavaFX (vyberte si verziu SDK pre svoj operačný systém).
 
* Stiahnutý ZIP archív v ľubovoľnom adresári rozbaľte.
 
* V rozbalenom adresári nájdite priečinok <tt>lib</tt> a zapamätajte si jeho adresu.
 
* Ak chcete s JavaFX pracovať aj z príkazového riadku, postupujte podľa [https://openjfx.io/openjfx-docs/#install-javafx tohto návodu].
 
 
 
=== Integrácia JavaFX 14 s NetBeans 11.2 ===
 
 
 
* Otvorte v NetBeans dialógové okno <tt>Tools -> Libraries</tt>.
 
* Pomocou tlačidla <tt>New Library...</tt> vytvorte novú knižnicu, ktorú nazvete <tt>JavaFX 14</tt>.
 
* Pomocou tlačidla <tt>Add JAR/Folder...</tt> vložte do knižnice všetky súbory s príponou <tt>.jar</tt> z priečinka <tt>lib</tt> spomínaného vyššie.
 
* Tým by mala byť JavaFX pripravená na používanie v NetBeans.
 
* Viac detailov možno nájsť [https://openjfx.io/openjfx-docs/#IDE-NetBeans tu].
 
 
 
=== Vytvorenie nového projektu využívajúceho JavaFX 14 v NetBeans 11.2 ===
 
 
 
* Vytvorte nový projekt, štandardne cez <tt>File -> New Project... -> Java with Ant -> Java Application</tt>. Pozor: <b>nevytvárajte</b> projekt typu JavaFX, pretože podpora novších verzií JavaFX v NetBeans nefunguje (pri staršej verzii v učebni možno zvoliť aj projekt typu JavaFX, ktorý automaticky vytvorí kostru programu využívajúceho JavaFX).
 
* Cez <tt>File -> Project Properties -> Libraries -> Classpath (+) -> Add Library...</tt> pridajte knižnicu <tt>JavaFX 14</tt>.
 
* Vo <tt>File -> Project Properties -> Run</tt> vyplňte do položky <tt>VM Options</tt> text <tt>--module-path "cesta-k-vasmu-adresaru-lib" --add-modules javafx.controls,javafx.fxml</tt>, kde namiesto <tt>cesta-k-vasmu-adresaru-lib</tt> uvediete cestu k vášmu adresáru <tt>lib</tt> spomínanému vyššie.
 
* Neplatí pri JavaFX 8 a starších verziách NetBeans, kde okrem vytvorenia projektu nie je nutný žiaden ďalší špecifický úkon.
 
* Najmä pod Linuxom sa niekedy môže stať, že vo <tt>File -> Project Properties -> Build -> Compiling</tt> je vo východzích nastaveniach zaškrtnutná možnosť <tt>Compile on Save</tt>. V takom prípade je potrebné túto možnosť &bdquo;odškrtnúť&rdquo;.
 
 
 
-->
 

Verzia zo dňa a času 20:26, 9. február 2021

Pre účely tohto predmetu budeme potrebovať nasledujúci softvér:

  • Java SE Development Kit 15 (stačí ľubovoľná verzia od 11 vyššie); pod Linuxom možno použiť aj balíky openjdk.
  • Platformu JavaFX 15 (na stránke ako „Latest Release”, ale opäť by mala stačiť aj verzia 11) pre vývoj aplikácií s grafickým používateľským rozhraním.
  • Vývojové prostredie IntelliJ IDEA Community Edition 3.2, prípadne vhodnú alternatívu ako napríklad Eclipse alebo Visual Studio Code.

Odporúčame pracovať vo vývojom prostredí, avšak je dôležité naučiť sa kompilovať a spúšťať programy aj z príkazového riadku (minimálne za účelom riešenia rôznych problémov).

Inštalácia softvéru

  • Stiahnite si Java SE Development Kit 15 odtiaľto a postupujte podľa inštalačných pokynov.
  • Zistite, či inštalácia správne pridala adresár obsahujúci javovský kompilátor a interpreter do systémovej premennej PATH. V prípade úspechu by napríklad nasledujúce príkazy zadané do príkazového riadku mali vypísať verziu javovského kompilátora resp. interpretra zhodnú s nainštalovanou verziou Javy.
javac --version
java --version
  • V prípade, že tieto príkazy nefungujú, alebo sa vypísala stará verzia Javy, pridajte adresár obsahujúci programy javac a java do systémovej premennej PATH manuálne (a prípadný adresár starej verzie Javy odtiaľ odoberte).
  • Stiahnite si ZIP archív s JavaFX odtiaľto (pre najnovšiu verziu Javy odporúčame „Latest Release”, čiže verziu 15) a rozbaľte ho do vhodného priečinka. Žiadne ďalšie úkony nie sú v rámci inštalácie JavaFX nutné, ale zapamätajte si adresu podadresára lib, keďže ju neskôr budete potrebovať. Nižšie v tomto texte budeme na túto cestu odkazovať ako na <cesta k lib>.
  • Stiahnite si IntelliJ IDEA Community Edition 3.2 odtiaľto a postupujte podľa inštalačných pokynov.
  • IntelliJ by mal automaticky rozoznať nainštalovanú verziu Javy. V prípade, že sa tak neudeje, pridajte ju manuálne podľa pokynov tu.

Skompilovanie a spustenie programu v Jave

Tento oddiel opisuje proces skompilovania a spustenia javovskej triedy Hello vypisujúcej na konzolu text Hello, World! v dvoch variantoch:

  • V prvom je trieda Hello súčasťou nepomenovaného balíka.
  • V druhom je trieda Hello súčasťou balíka somepackage.

Z príkazového riadku

Uvažujme najprv prípad, keď je trieda Hello súčasťou nepomenovaného balíka, t.j. jej zdrojový kód vyzerá nasledovne.

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }

}
  • Trieda Hello musí byť uložená v súbore Hello.java (názov súboru bez prípony .java sa musí zhodovať s názvom triedy).

Postup skompilovania a spustenia triedy Hello z príkazového riadku je potom nasledovný:

  1. V príkazovom riadku sa nastavíme do priečinka obsahujúceho súbor Hello.java.
  2. Triedu skompilujeme príkazom javac Hello.java, v dôsledku čoho by mal v rovnakom priečinku vzniknúť súbor Hello.class spustiteľný na JVM.
  3. Triedu Hello spustíme príkazom java Hello (prípadné argumenty môžeme triede Hello zadávať obvyklým spôsobom).
Pozor: kým pri volaní kompilátora javac je potrebné uviesť aj príponu kompilovaného súboru .java, pri volaní interpretra java príponu spúšťanej triedy .class nepíšeme (kým argumentom kompilátora je bežná cesta k súboru, argumentom interpretra je tzv. classpath danej triedy).

Ďalej uvažujme prípad, keď je trieda Hello súčasťou balíka somepackage a jej kód tak vyzerá nasledovne.

package somepackage;

public class Hello {

    public static void main(String[] args) {
        System.out.println("Hello, World!");
    }

}
  • V tomto prípade by mala byť trieda Hello opäť uložená v súbore Hello.java, ktorý by mal navyše byť uložený v priečinku somepackage.

Skompilovanie a spustenie triedy Hello – alebo presnejšie somepackage.Hello – z príkazového riadku realizujeme nasledovne:

  1. Nastavíme sa do priečinka obsahujúceho priečinok somepackage.
  2. Triedu skompilujeme príkazom javac somepackage/Hello.java (s príponou).
  3. Triedu spustíme príkazom java somepackage.Hello (ide o tzv. classpath triedy Hello).

V IntelliJ IDEA

  1. Vytvoríme nový projekt pomocou voľby New Project. V prvých dvoch krokoch použijeme východzie nastavenia (jazyk Java, bez použitia šablóny ani ďalších voliteľných možností), v treťom kroku zadáme ľubovoľný názov projektu.
  2. Ak sa nezobrazuje, zobrazíme panel so štruktúrou projektu cez View --> Tool Windows --> Project (alebo s použitím klávesovej skratky Alt + 1).
  3. Rozbalíme modul pomenovaný rovnako ako projekt (tučným) a zvolíme priečinok src.
  4. V ponuke File --> New (prípadne v podponuke New kontextovej ponuky, ktorá sa zobrazí po kliknutí na src pravou myšou) by sa teraz mala objavovať možnosť Java Class.
  5. Po zvolení tejto možnosti zadáme názov triedy (presnejšie celú classpath vrátane balíkov), t.j. Hello pre triedu v nepomenovanom balíku a somepackage.Hello pre triedu v balíku somepackage.
  6. V závislosti od vybranej alternatívy skopírujeme do editora vhodnú variantu triedy Hello z predchádzajúceho oddielu.
  7. Triedu skompilujeme a spustíme napríklad kliknutím na zelenú šípku vedľa hlavičky metódy main a zvolením možnosti Run 'trieda.main()'. Následné ďalšie spustenia možno realizovať skratkou Shift + F10.

Dôvod, prečo skratka Shift + F10 (ekvivalentná možnosti Run --> Run 'Hello') nefunguje hneď od začiatku je ten, že sme zatiaľ nevytvorili tzv. konfiguráciu behu, v ktorej sa napríklad zadáva verzia Javy použitá pri kompilovaní, hlavná trieda projektu (t.j. trieda, ktorá sa má spustiť po spustení projektu), prípadné argumenty z príkazového riadku, parametre pre kompilátor a interpreter, atď. V prípade kliknutia na zelenú šípku vedľa metódy main a zvolenia príslušnej možnosti sa automaticky vytvorí tzv. dočasná konfigurácia, pri ktorej sa spustí daná trieda s východzími nastaveniami.

Pre neskoršie účely je dôležité vedieť vytvárať aj vlastné (a permanentné) konfigurácie behu (v jednom projekte možno definovať aj viacero konfigurácií, medzi ktorými sa potom možno prepínať pomocou prepínača v pravej časti nástrojovej lišty). Postup vytvorenia novej konfigurácie behu je nasledujúci:

  1. Zvolíme Run --> Edit Configurations....
  2. Klikneme na tlačidlo + a zvolíme možnosť Application.
  3. Následne môžeme v hlavnej časti okna napravo zadať názov konfigurácie, napríklad Konfiguracia.
  4. Zadáme potrebné údaje: predvolená by mala byť správna verzia Javy (napr. java 15), do políčka Main class zadáme názov hlavnej triedy projektu (napr. Hello), do políčka Program arguments môžeme zadať prípadné argumenty pre spúšťanú triedu z príkazového riadku (políčko môžeme ponechať prázdne). Prípadné ďalšie možnosti môžeme pridať kliknutím na Modify options.
  5. Ukončíme dialóg tlačidlom OK.
  6. Na nástrojovej lište sa uistíme, že je vybraná práve vytvorená konfigurácia a projekt spustíme skratkou Shift + F10.

Viac sa o konfiguráciách behu možno dočítať tu.

Skompilovanie a spustenie programu v JavaFX

Ukážeme si teraz, ako z príkazového riadku a v IntelliJ IDEA skompilovať a spustiť nasledujúcu triedu pracujúcu s JavaFX, ktorá by mala zobraziť okno s titulkom Hello, World!. Táto trieda musí byť uložená v súbore HelloFX.java.

import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.layout.*;

public class HelloFX extends Application {
    @Override
    public void start(Stage primaryStage) {
        Pane pane = new Pane();
        Scene scene = new Scene(pane, 300, 250);
        
        primaryStage.setTitle("Hello, World!");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
    
    public static void main(String[] args) {
        launch(args);
    }
}

V nasledujúcom <cesta k lib> odkazuje na cestu k adresáru lib rozbaleného ZIP archívu JavaFX, o ktorej sme sa už zmienili vyššie. Viac detailov možno nájsť tu.

Z príkazového riadku

  1. Nastavíme sa do priečinku obsahujúceho súbor HelloFx.java.
  2. Triedu skompilujeme príkazom
javac --module-path <cesta-k-lib> --add-modules javafx.controls,javafx.fxml Hello.java
  1. Triedu spustíme príkazom
java --module-path <cesta-k-lib> --add-modules javafx.controls,javafx.fxml Hello

V IntelliJ IDEA