Tvorba windows .exe souborů z Javovských programů pomocí JexePack


Zpracoval: Roman Soukal
Vedoucí projektu, korektury, závěrečná revize: Pavel Herout



Obsah:

Úvod - co to je to JexePack?

JexePack - je aplikace, která vytvoří z jakéhokoliv programu v Javě komprimovaný 32-bitový .exe souboru spustitelný v systému Windows. Exe soubor funguje přesně tak, jak očekáváme -- tedy stejně jako běžný program, tudíž umožňuje i použití AWT nebo Swing. Ovšem podmínkou je nainstalovaná J2SE minimálně takové verze, která je vyžadována naším Java programem. To znamená, že program JexePack neřeší problém snadnějšího šíření programů v Javě, protože je závislý na nainstalovaném JRE.

Jaké jsou tedy výhody vzniklého .exe souboru oproti standardním .jar souborům?

Jaké jsou tedy nevýhody? Opomineme-li ztrátu přenositelnosti mezi různými platformami, se kterou při tvorbě .exe souboru musíme samozřejmě počítat, tak je tu ještě jedna zásadní nevýhoda. JexePack je totiž registrovaným produktem firmy Duckware a není to freeware. Zakoupení registrované verze stojí $99.95, ale je možné si zdarma stáhnout neregistrovanou verzi, která má určitá omezení (viz omezení).


Stručný návod

V dalším textu budou uvedeny dva vzorové příklady, jak vytvořit pomocí JexePacku .exe soubor.
Podrobnější popis, návody, příklady a výčet zbylých parametrů naleznete v
manuálu.

Použití:

  jexepack.exe [/parametry] výčet_souborů

  /main:[název hlavní třídy] - jméno třídy obsahující metodu main (povinný parametr)
  /out:[název tvořeného souboru]
- jméno výstupního .exe (nutno zadat i s příponou)
  /dir:[adresář komprimovaných souborů]
- není-li uveden, berou se soubory v aktuálním adresáři
  /minver:[minimální verze javy požadovaná pro spuštění programu]
  /jar:[jméno případného Jar souboru]
  /icon:[soubor ikony]
  /w
- spustí program v okením režimu (pomocí javaw)
  výčet_souborů - výčet všech souborů přidávaných do .exe souboru - např. *.class *.gif


Tvorba .exe souboru z HelloWorld aplikace

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

  jexepack.exe /main:HelloWorld HelloWorld.class

Po provedení tohoto příkazu vznikne soubor HelloWorld.exe

Tvorba .exe souboru z .jar souboru

Ukázka bude na "okenní" aplikaci HelloWorldWindow.java

  import javax.swing.*;

  public class HelloWorldWindow extends JFrame {
    HelloWorldWindow() {
      super("HelloWord");
      this.add(new JLabel("HelloWord", JLabel.CENTER));
      this.setSize(180, 70);
      this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    public static void main(String[] args) {
      new HelloWorldWindow().setVisible(true);
    }
  }
      
Je třeba vytvořit přímo spustitelný soubor HelloWorldWindow.jar, pro který použijeme ikonu .
Samotné vytvoření souboru HelloWorldWindow.exe pak představuje následující příkaz:

  jexepack.exe /out:HelloWorldWindow.exe /main:HelloWorldWindow.jar /minver:1.5 /jar:HelloWorldWindow.jar /icon:HelloWorld.ico /w HelloWorldWindow.jar


Omezení neregistrované verze

Neregistrovaná verze je omezená pouze tím, že po každém spuštění .exe souboru se nejprve zobrazí okénko:

Po zavření tohoto okénka už funguje program jak má.


Vnitřní struktura JexePacku

JexePack funguje tak, že do .exe souboru zaarchivuje všechny zadané soubory. Při spuštění se pak vytvoří podadresář v adresáři Temp windows, který obsahuje soubor (nejspíš zaváděcí) jexepackboot.class. Ten pak extrahuje programové soubory do stejného adresáře. Program pak běží vlastně z tohoto adresáře Tempu windows. Po ukončení programu se celý adresář smaže.

Díky znalosti této vlastnosti zaniká v úvodu jmenovaná 2. výhoda, protože za běhu programu máme přístup k programovým souborům. Velkou nevýhodou z tohoto vyplývající je i to, že při násilném ukončení programu zůstávají výše zmiňované soubory neodstraněné v Tempu windows. Další nevýhodou může být i to, že zejména zavádění větších programů bude trvat o dost déle, než by tomu bylo standardně, protože se soubory musí nejdříve extrahovat. Z tohoto důvodu se program stává téměř nepoužitelným pro velké programy.


Závěr

Tento způsob vytváření .exe souborů z programů v Javě je velmi dobře použitelný pro malé prográmky určené především pro širokou veřejnost. Vždyť .exe soubor dokáže spustit i ten největší počítačový "laik". Velikou výhodou je i kompaktnost programu, neboť přenášíme vždy jen jeden soubor. Dále pak nesmíme zapomenout na možnost ikonizace, která dodává .exe souboru vzhled plnohodnotné windows aplikace.

Je ale třeba si uvědomit, že na cílovém počítači musí být nainstalován příslušný Java Virtual Machine, jinak program nebude fungovat. Velikou škodou pak je, že JexePack není volně šířitelný.

Při bližším zamyšlení zjistíme, že JexePack je nádherná ukázka toho, jak se dá velmi snadno a rychle vydělávat na dobrém, ale technologicky ne příliš složitém nápadu.