Jazyk Java je možné uplatnit mnoha různými způsoby. Mezi ty nejčastější patří Java applety a aplikace. Dnes se podíváme na to, jak se v Javě aplikace píše a co musí třída splňovat, aby ji bylo možné spouštět jako aplikaci. Zároveň si ukážeme dva konkrétní příklady aplikace v Javě.

Jemný úvod – aplikace vs. applet

Aplikace je samostatně běžící program, který pro své spuštění potřebuje pouze Java Virtual Machine (aplikace v jazyce Java). Tím se liší od appletu, který samostatně neběží, ale je začleněn v HTML stránce, kde je mu vyhraněna obdélníková oblast (podobně jako obrázkům).

Kromě aplikací a appletů lze používat Javu pro psaní servletů, což je javový kód běžící v rámci webového serveru používaný pro generování obsahu HTML stránek. Další oblast použití Javy je psaní uložených procedur pro některé databázové servery (např. Oracle). Novým trendem na poli mobilních telefonů jsou přístroje, používající Javu pro spouštění aplikací. To jen ukazuje univerzálnost jazyku Java (Java byla dokonce původně vyvinuta pro účely ovládání elektrických spotřebičů).

Těmito způsoby využití se však v rámci našeho seriálu zabývat nebudeme. Osvojíte–li si však jazyk Java, nebude pro vás problém ho využívat jinde než pouze v appletech či aplikacích.

Aplikace

Jako aplikace může být spuštěna libovolná třída, která implementuje metodu main():

public static void main (String args[])

Jedná se o statickou metodu, tedy metodu třídy, která nevrací žádnou hodnotu. Jako parametr dostává pole řetězců, ve kterém jsou uloženy parametry aplikace předané na příkazovém řádku.

Následující příklad ukazuje aplikaci pro výpočet faktoriálu.

faktorial.java:

public class faktorial {
 /** metoda fakt() počítá faktoriál parametru */
 static int fakt(int x) {
   if (x<0) return -1;
   if (x==0) return 1;
   return x*fakt(x-1);
   }
 /** Hlavní metoda, která bude vyvolána, pokud se třída spustí
  * jako aplikace.
  * Vyžaduje jeden celočíselný nezáporný parametr.
  */ 

 public static void main(String[] args) {
   try {
     // převedení řetězce na číslo
     int cislo = Integer.parseInt(args[0]);
     // výpočet a výpis faktoriálu
     System.out.println( fakt(cislo) );
     }
     // ošetření výjimek, které mohou nastat při čtení parametru
     catch (ArrayIndexOutOfBoundsException e) {
       // hodnota argv[0] nebyla definována
       System.out.println(„Musíte zadat parametr!“);
     }
     catch (NumberFormatException e) {
       // hodnota argv[0] nebyla celé číslo
       System.out.println(„Zadaný parametr nebyl celé číslo!“);
     }
   }
}

Zkompilovanou třídu faktorial si můžete stáhnout.

Všimněte si, že tato třída má pouze statické metody a při běhu programu nevzniká žádná její instance. To však samozřejmě není podmínkou. V metodě main() se často založí instance této třídy, která se pak používá při běhu programu (to bude vidět i v dalším příkladu).

Třídu zkompilujeme běžným způsobem:

javac faktorial.java

a spustíme např.

java faktorial 5

Kromě toho, že lze třídu spustit jako aplikaci, můžeme se na ni odkazovat i z jiných tříd tak, že z jiného místa v kódu zavoláme faktorial.fakt(5).

Pozn.: pro vysoké hodnoty vstupního parametru program vrátí chybné hodnoty, protože dojde k přetečení proměnné (hodnota je větší, než největší přípustná hodnota proměnné typu int). Pro přehlednost zde tento problém neošetřujeme.

Aplikace s oknem

Na dalším příkladu si ukážeme aplikaci, která vytváří okno. Jedná se o prohlížeč souborů, který zobrazí soubor, jehož jméno je zadáno coby parametr programu.

Příklad je složitější a je v něm využito několik technik, které budou popsány v následujících dílech seriálu. Proto můžete klidně přeskočit ty části, kterým nebudete rozumět.

Metoda main() založí instanci objektu prohlizec, která zobrazuje okno se souborem. Na příkladu je dobře vidět ošetření výjimek, které bylo popsáno v předcházejícím díle.

Okno obsahuje rámeček s výpisem souboru (TextArea) a tlačítko pro zavření okna (Button). Rozmístění těchto komponent na ploše okna zajišťuje objekt BorderLayout. Na stisknutí tlačítka reaguje objekt ActionListener tím, že spustí metodu zavri(). Pro reakci na stisk tlačítka je zde použito vnořených tříd, se kterým jsme se zatím nesetkali. Používání grafického uživatelského rozhraní a používání událostí bude popsáno v některým z dalších dílů.

Používáním vstupů a výstupů a práce se soubory bude rovněž vysvětleno v samostatné kapitole, zatím se můžete spokojit s tím, že tento kód načte obsah souboru do proměnné text.

prohlizec.java:

import java.awt.*;
import java.lang.*;
import java.io.*;
import java.awt.event.*;
public class prohlizec extends Frame {
  TextArea soubor;
  Button tlacitko;
  /** Konstruktor objektu */
  public prohlizec(String jmenoSouboru) {
    // volá konstruktor třídy Frame
    super(jmenoSouboru);
    // nastavení správce rozvržení
    this.setLayout(new BorderLayout(10, 10));
    // nastavení textové oblasti
    soubor = new TextArea();
    soubor.setEditable(false);
    this.add(soubor, „Center“);
    // nastavení tlačítka
    tlacitko = new Button(„Zavři“);
    tlacitko.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
           zavri();
           }
      });
    this.add(tlacitko, „South“);
    // konečné uspořádání komponent na ploše okna
    this.pack();
  }
  /** Metoda zavri() způsobí zavření okna */
  public void zavri() {
    dispose();
    }
  /** Metoda nastavText() nastaví text v hlavním panelu okna */
  public void nastavText(String text) {
    soubor.setText(text);
    }
/** Hlavní metoda, která bude vyvolána, pokud se třída spustí
  * jako aplikace.
  * Vyžaduje jeden parametr se jménem souboru.
  */ 

  public static void main(String[] args) {
    try {
      String text = „“;
      // vytvoření instance třídy
      prohlizec pr = new prohlizec(args[0]);
      // otevření souboru pro čtení
      DataInputStream vstup = new DataInputStream(new FileInputStream(args[0]));
      // načtení obsahu souboru do proměnné text
      while (vstup.available()>0) {
        text += vstup.readLine()+“\n“;
        }
      // nastavení textu
      pr.nastavText(text);
      // zobrazení dialogu
      pr.show();
      }
      // ošetření výjimek
      catch (IndexOutOfBoundsException e) {
        System.out.println(„Syntaxe: java prohlizec <jmeno_souboru>“);
        }
      catch (FileNotFoundException e) {
        System.out.println(„Zadaný soubor nebyl nalezen.“);
        }
      catch (IOException e) {
        System.out.println(„Chyba při čtení souboru.“);
        }
  }
}

Zkompilovanou třídu prohlizec si můžete stáhnout.

V příštím díle se podobným způsobem podíváme na to, jak se píší applety.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět