Jak přidat vlastní program do Application Manageru

Hned na úvod je nutné zdůraznit, že nezáleží na tom, zda přidáváme konzolový program nebo program s GUI. Pouze se ujistěte, že v případě konzolového programu máte v Application Manageru v File > Preferences > Advanced v sekci "Output Options" zaškrtnuto "Show Java console".

Postup přidávání bude ukázán na jednoduché Java aplikaci využívající GUI:

import java.awt.*;
import javax.swing.*;

public class HelloWorld {

  public static void main(String[] args) {
    JFrame frame =  new JFrame("HelloWindow"); 
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

    JLabel label = new JLabel("Hello World!", JLabel.CENTER);
    Container content = frame.getContentPane();  
    content.add(label);

    frame.pack();
    frame.show();
  }
}

1. krok -- vytvoření .jar archivu

Zabalení

Java Web Start umí zpracovávat pouze .jar archivy. Je tedy nutné náš program (přinejmenším všechny .class soubory vzniklé při překladu) zabalit.

V našem případě po překladu HelloWorld.java vznikne jeden nový soubor HelloWorld.class, který se musí zabalit.

Všechny následující příkazy využívají nástrojů J2SDK.
Do příkazové řádky napište:

    jar cf Hello.jar HelloWorld.class
Poznámka:
Pokud nemáte v systémové proměnné PATH dobře nastavené cesty, bude vaše příkazová řádka vypadat o něco komlikovaněji. Například:
    F:\j2sdk1.4.1\bin>jar cf Hello.jar -C F:\MyJava HelloWorld.class
Pozor! Soubor Hello.jar pak ale bude uložen v adresáři, odkud spouštíte jar.exe! V tomto případě tedy v F:\j2sdk1.4.1\bin

Podepsání archivu

Podepsání archivu je nutné vždy, když váš program vyžaduje práva, která jsou mimo rozsah práv apletů. (To ale nutně neznamená, že váš program musí být aplet.) Přestože JWS spouští programy mimo webový prohlížeč, zůstávají stále v "restricted containeru". Podepsat archiv musíme zejména, když chceme pracovat s diskem nebo se připojovat k síti.

Poznámka:
Protože program HelloWorld nepracuje s diskem, nemusíme jej nutně podepisovat, ale můžeme.

Nejprve vytvoříme vlastní klíč:

    keytool -genkey -keystore mojeklice -alias jws
Budete vyzváni, abyste zadali heslo (pro přístup k vámi vytvořeným klíčům), dále křestní jméno a příjmení a nějaké další informace. Všechny údaje jsou nepovinné, ale měli byste uvést alespoň příjmení. Nedoporučuje se při podepisování používat akcentované znaky, protože JWS (verze 1.2) je zobrazit neumí.

Zbývá ještě podepsat archiv (po dotazu na heslo zadejte stejné, jako při generování klíče -- v našem případě to bylo zkouska):

    jarsigner -keystore mojeklice Hello.jar jws

Poznámka:
Zabalení programu do .jar souboru je činnost zcela běžně prováděná.

2. krok -- vytvoření .jnlp souboru

V této části vstupuje do hry Java Network Launch Protocol (JNLP). Kromě .jar souboru vytvořeného v předchozím kroku, vyžaduje JNLP, abychom vytvořili soubor popisující, jak se má aplikace spustit. Formát souboru je úplně popsán v Java Network Launching Protocol & API Specification. Pro základní informaci postačí, že je to XML soubor s příponou .jnlp.

Je potřeba poskytnout údaje o umístění zdrojových souborů, o tom jaké informace se mají zobrazit při natahování aplikace a jaké jsou zdrojové soubory aplikace. Další části (jako bezpečnost) jsou nepovinné a vyžadují se pouze tehdy, potřebujeme-li se dostat mimo "restricted container". Detaily jako, který .class soubor se má spouštět první, mohou být uvedeny v .jar nebo v .jnlp souboru.

Nyní se podívejme na každou část .jnlp souboru samostatně:
První tag jednoduše popisuje verzi XML a kódování. Technicky je tento tag nepovinný, ale je dobré jej uvádět.

    <?xml version="1.0" encoding="Windows-1250"?>
Další je začátek <jnlp> tagu. Zde určíte podporovanou verzi JNLP a dále pak místo, kde se nachází .jar soubor. (V našem případě je to v adresáři F:\MyJava\ )
Bez části href="hello.jnlp" by se do Application Manageru nepřidala ikona (ať už implicitní, tj. "kouřící šálek", nebo námi připravená) naší aplikace! Zároveň, pokud ji uvedeme, musí být soubor hello.jnlp umístěn na URL uvedené v codebase.
    <jnlp spec="1.0+"
       codebase="file:///f:/MyJava/"
       href="hello.jnlp"
    >
Další tag <information> poskytuje informace o tom, co se zobrazí při nahrávání aplikace.
    <information>
       <title>Hello World</title>
       <vendor>Basic GUI</vendor>
       <homepage href="http://home.zcu.cz/" />
       <description>Demonstration of JNLP</description>
       <icon href="ikona.gif">
       <offline-allowed/>
    </information>
Nepovinný <offline-allowed/> tag dovoluje spustit aplikaci, i když počítač není připojen k síti. Týká se ale pouze aplikací stahovaných z internetu, tedy těch, které mají codebase="http://..." a způsobí, že při spouštění aplikace nebude JWS požadovat spojení na stránku z codebase. V našem případě, kdy máme program na disku, je zcela lhostejné, zda tento tag uvedeme nebo ne.


Tag <security> je nutný pouze tehdy, potřebujeme-li zvláštní povolení. Zatímco nahrávání a ukládání
     souborů se obejde bez podepsaného kódu, činnosti typu "přístup do sítě" podpis vyžadují. Prvek security podporuje
     dvě možnosti buď <all-permissions/> nebo <j2ee-application-client-permissions/>.
     J2EE povolení je obvykle dostačující, neboť poskytuje "socket permission", "clipboard access permission",
     povolení pro tisk a sedm dalších povolení. Pokud ale vaše aplikace pracuje s diskem, zvolte <all-permissions/>
    
    <security>
       <j2ee-application-client-permissions/>
    </security>
Část <resources> umožňuje specifikovat požadovanou runtime verzi a určit jméno .jar souboru, který obsahuje náš program. Jeho umístění je uvedeno výše v části codebase.
    <resources>
       <j2se version="1.2+" />
       <jar href="Hello.jar"/>
    </resources>
I když jste určili hlavní třídu v souboru Manifestu .jar archivu (v našem příkladu to nebylo uvedeno), musíte hlavní třídu určit i v <application-desc>.
Protože je tento tag poslední, můžeme také uzavřít tag <jnlp>.
    <application-desc main-class="HelloWorld" />
    </jnlp>
Sloučením všech částí dohromady dostaneme jeden hello.jnlp soubor:
    <?xml version="1.0" encoding="Windows-1250"?>
    <jnlp spec="1.0+"
       codebase="file:///f:/MyJava/"
       href="hello.jnlp"
    >
    <information>
       <title>Hello World</title>
       <vendor>Basic GUI</vendor>
       <homepage href="http://home.zcu.cz/" />
       <description>Demonstration of JNLP</description>
       <offline-allowed/>
    </information>
    <security>
       <j2ee-application-client-permissions/>
    </security>
    <resources>
       <j2se version="1.2+" />
       <jar href="Hello.jar"/>
    </resources>
    <application-desc main-class="HelloWorld" />
    </jnlp>

3. krok -- spuštění programu

Zrekapitulujme současný stav -- máme podepsaný soubor Hello.jar, ve kterém je zabalen HelloWorld.class. Vytvořili jsme soubor hello.jnlp, který uložíme na stejné místo jako Hello.jar. Toto místo je určeno v codebase. V tomto konkrétním případě do F:\MyJava\

Od této chvíle můžeme soubor hello.jnlp spouštět -- opravdu spouštět, Java Web Start má totiž tyto soubory asociovány. Spouštění může být dokonce odkudkoliv (tj. soubor hello.jnlp může ležet v libovolném adresáři), ale pak je nutné mít současně jednu kopii hello.jnlp ve stejném adresáři jako Hello.jar.

Poté, co napíšete jméno hello.jnlp souboru a stisknete Enter, zobrazí se vám následující inicializační okno:

Vzápětí se pokusí JWS program spustit. Nicméně, protože program (poněkud uměle) vyžaduje dodatečné bezpečnostní povolení, nepoběží hned, ale nejdříve budete vyzváni k udělení tohoto povolení:

Pokud otázku potvrdíte (kliknutím na "Start"), už se tato výzva nezobrazí. Pokud ji zamítnete, zobrazí se při dalším pokusu o spuštění aplikace.
Za předpokladu, že jste udělili povolení, program se spustí:

Do Application Manageru pak přibude odkaz na tuto aplikaci. Všiměte si, že údaje uvedené v <information> se nezobrazují pouze při inicializaci aplikace, ale uvidíte je i v Application Manageru:


Poznámka:
Úplně stejným způsobem se distribuují programy přes webové servery. Jen na místě <codebase> je uvedena URL. Na stránku pak vložíte odkaz na váš .jnlp soubor.

Problém nastává tehdy, není-li Web server nastaven, tak aby vracel správný MIME typ k obsahu .jnlp souborů. Ten je application/x-java-jnlp-file.

Více na: http://developer.java.sun.com/developer/technicalArticles/Programming/jnlp/

Zpět Další