SlideShare a Scribd company logo
ダブルクリックで起動する
JavaFXアプリケーションJAR
 第8回 JavaFX勉強会 2012-11-30
 高橋   徹 (@boochnich & Java読書会)
発表者について
              @boochnich
         http://d.hatena.ne.jp/torutk/
• Java GUI歴
  – jdk1.0時代はAWT
  – jdk1.1時代はAWT、Netscape IFC、Swing
  – jdk1.2以降はSwing、Java2D、(Java3D)

• Java読書会BOF代表
  – 1998年~毎月1回開催、通算164回、24冊目
  http://www.javareading.com/bof/
はじめに
• JavaFXアプリケーションの起動方法

 – スタンドアロン・プログラム
 – Webスタート
 – Webページに埋め込み
 – セルフ・コンテインメント・アプリケーショ
   ン
  javafxpackagerでスタンドアロン・プログラム
      (実行可能JAR)を作成する話です。
アジェンダ
•   JDK 7u9の中にJavaFX 2.2.3
•   NetBeansでJavaFXアプリケーションを作成
•   コマンドでダブルクリック起動JARを作成
•   (おまけ)OS固有のインストーラを作成
JDK 7u9の中のJavaFX 2.2.3
C:Program FilesJavajdk1.7.0        (Windows OSの例)
  +-- bin
                                        JDKのディクレト
  |     +-- javafxpackager.exe
  +-- jre                               リツリー中に
  |     +-- lib                         JavaFX関連ファイ
  |           +-- javafx.properties
                                        ルが含まれてい
  |           +-- jfxrt.jar
  +-- lib
                                        ます。
        +-- ant-javafx.jar
        +-- javafx-doclet.jar

(抜粋につき、すべてのJavaFX関連ファイルを記載してはおりません)
NetBeansでJavaFXアプリケーション(1/5)

• NetBeansで新規プロジェクト[JavaFXアプリ
  ケーション]を選択し、雛形を作成

• プレゼンなので文字を大きく
 – CSSでチャレンジしてみます


• NetBeans上でビルドして実行
NetBeansでJavaFXアプリケーション(2/5)

• ファイルエクスプローラでJARをダブルク
  リック




• コマンドプロンプトからjava –jarコマンド
  実行
NetBeansでJavaFXアプリケーション(3/5)

• ソースを自分でコンパイル、JAR化してみ
   る
 >javac -cp “C:Program Filesjavajdk1.7.0jrelibjfxrt.jar“
 -d buildclasses -encoding UTF-8   srchellojjfxugHelloJjfxug.java

>jar cvfm Hello.jar hello.mf -C buildclasses .
マニフェストが追加されました
hellojjfxug/を追加中です(入=0)(出=0)(0%格納されました)
hellojjfxug/HelloJjfxug$1.classを追加中です(入=944)(出=539)(42%収縮されました)
hellojjfxug/HelloJjfxug.classを追加中です(入=1413)(出=864)(38%収縮されました)
hellojjfxug/HelloJjfxug.cssを追加中です(入=302)(出=214)(29%収縮されました)

>java –jar Hello.jar
Exception in thread "main" java.lang.NoClassDefFoundError: javafx/app
lication/Application
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)


 残念、動きませんでした。クラスパス指定が不足してます。
NetBeansでJavaFXアプリケーション(4/5)

• 違いはなにか?
   – NetBeansの生成したJARと比較してみる

                                                    NetBeansの生成したJAR
com/javafx/main/Main$1.class
com/javafx/main/Main$2.class                        にだけ含まれるクラス
com/javafx/main/Main.class                          ファイル群
com/javafx/main/NoJavaFXFallback.class

Manifest-Version: 1.0
JavaFX-Version: 2.2
implementation-vendor: torutk
implementation-title: HelloJjfxug                   NetBeansの生成したJAR
implementation-version: 1.0                         のMANIFEST.MF内容
JavaFX-Application-Class: hellojjfxug.HelloJjfxug
JavaFX-Class-Path: HelloJjfxug.jar
Created-By: JavaFX Packager
Main-Class: com/javafx/main/Main
NetBeansでJavaFXアプリケーション(5/5)

• -Djavafx.verbose=true             を指定しJARを起動する
>java -Djavafx.verbose=true -jar distHelloJjfxug.jar
 : (中略)
1) Try existing classpath...
===== URL list
file:/C:/work/HelloJjfxug/dist/HelloJjfxug.jar
=====
2) Try javafx.runtime.path property...
3) Look for cobundled JavaFX ... [java.home=C:Program FilesJavajdk1.7.0jre
===== URL list
file:/C:/work/HelloJjfxug/dist/HelloJjfxug.jar
file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/jfxrt.jar
file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/deploy.jar
file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/plugin.jar
file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/javaws.jar
=====
Try calling Class.forName(hellojjfxug.HelloJjfxug) using classLoader = java.net.
URLClassLoader@6f404c51
found class: class hellojjfxug.HelloJjfxug
 : (後略)
ダブルクリックで起動するJARの作り方

• javafxpackagerを使うと、実行可能JARを作
  成できます。
 >javafxpackager -createjar -nocss2bin
                                                      Applicationクラスを継
  -appclass hellojjfxug.HelloJjfxug                   承したmainメソッドを
  -srcdir buildclasses                               持つクラスを指定
  -outdir .                                       -srcdirですが、JARに含
  -outfile HelloJjfxug-0.1                        めるクラスファイルの
                                                  あるディレクトリを指
                                                  定
 > java –jar HelloJjfxug-0.1.jar
                                                 JARファイル名(拡張
                                                 子不要)を指定

 コマンドリファレンス
 http://docs.oracle.com/javafx/2/deployment/javafxpackager001.htm
情報源
• 「Oracle Blogs日本語のまとめ」より
  [JavaFX] Native packaging for JavaFX
  • http://orablogs-jp.blogspot.jp/2012/06/native-
    packaging-for-javafx.html
• Oracle JavaFXドキュメント
  ”Deploying JavaFX Applications”より
  • http://docs.oracle.com/javafx/2/deployment/jfxp
    ub-deployment.htm
      5.5 Create the Main Application JAR File など
まとめ
• JavaFXには、アプリケーションのインストール・
  実行・更新の仕組みがあります。
• NetBeans 7.3ではプロジェクトの設定のみで簡単
  に利用できます。
• javafxpackagerコマンド(またはAntタスク)が提
  供されています。
• eclipse派な人にはe(fx)clipseプラグインがありま
  す。
おまけ MSI形式の作成
• javapackagerでWindows MSI形式のインスト
  ーラを作成可能です。
  – 要WiX(Windows Installer XML) ・・・無償


• NetBeans 7.3 beta2でも可能です。

• 詳しくはブログで
  http://d.hatena.ne.jp/torutk/20121119
おまけ2 RPM形式の作成

• javapackagerでLinux RPM形式のインストー
  ラを作成可能です。
 – rpmbuildコマンドが実行できること
• NetBeans 7.3 beta2でも可能です。
サンプルプログラム注釈
CSSファイルの読み込み(ソースファイルと同じ場所に置く場合)
  Scene scene = new Scene(root, 300, 250);
  scene.getStylesheets().add(
      this.getClass().getResource("HelloJjfxug.css").toExternalForm());



CSSファイルの記述(Buttonクラスのフォント設定)
  .button {
      -fx-font-size: 24;
      -fx-font-family: Meiryo sans-serif;
  }
NetBeansでJavaFXアプリケーション(補
               1)
• com.javafx.main.Mainクラスを調べる
   – システムプロパティjava.home
   – URLClassLoaderでApplication継承クラスをロー
     ドしmainメソッドを実行している。
ClassLoader urlClassLoader = new URLClassLoader(urls, null);
  :
Thread.currentThread().setContextClassLoader(urlClassLoader);
  :
Class appClass = Class.forName(appName, false,
       Thread.currentThread().getContextClassLoader());
  :
Method mainMethod = appClass.getMethod("main", new Class[] { new
String[0].getClass() });
  :
mainMethod.invoke(null, new Object[] { args });
ねこび~ん
• ねこび~んのアイコン
 http://ja.netbeans.org/nekobean/


• 泣き声
 http://koukaongen.com/

More Related Content

What's hot

JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
Satoshi Akama
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
Yasumasa Suenaga
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Yusuke Yamamoto
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話Preferred Networks
 
Sd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteSd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteAkio Katayama
 
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
Takahiro YAMADA
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
龍一 田中
 
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
Yoshitaka Kawashima
 
Apache Archiva を試す
Apache Archiva を試すApache Archiva を試す
Apache Archiva を試す
bouzuya
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
龍一 田中
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
Yosuke Mizutani
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Norito Agetsuma
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE
Taiichilow Nagase
 
ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入
Hiroki Tamiya
 
Jmeter20120421
Jmeter20120421Jmeter20120421
Jmeter20120421
hatakyo
 
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
johgus johgus
 
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
Yuji Kubota
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
Hori Tasuku
 

What's hot (20)

JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化JenkinsとjMeterで負荷テストの自動化
JenkinsとjMeterで負荷テストの自動化
 
HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)HeapStats(Java解析ツールバトル)
HeapStats(Java解析ツールバトル)
 
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
Java デバッガ活用術 ~勘デバッグ・print デバッグから抜けだそう~ #jjug_ccc #ccc_h4
 
継続的インテグレーションとテストの話
継続的インテグレーションとテストの話継続的インテグレーションとテストの話
継続的インテグレーションとテストの話
 
Sd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 WhiteSd Loader Seasar Con2009 White
Sd Loader Seasar Con2009 White
 
Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所Javaアプリケーションサーバ 構築・運用の勘所
Javaアプリケーションサーバ 構築・運用の勘所
 
Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Web技術勉強会 第30回
Web技術勉強会 第30回Web技術勉強会 第30回
Web技術勉強会 第30回
 
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
マイクロフレームワークEnkan(とKotowari)ではじめるREPL駆動開発
 
Apache Archiva を試す
Apache Archiva を試すApache Archiva を試す
Apache Archiva を試す
 
Web技術勉強会 第31回
Web技術勉強会 第31回Web技術勉強会 第31回
Web技術勉強会 第31回
 
はじめての CircleCI
はじめての CircleCIはじめての CircleCI
はじめての CircleCI
 
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷JavaTomcatの実装から学ぶクラスローダリーク #渋谷Java
Tomcatの実装から学ぶクラスローダリーク #渋谷Java
 
大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE大規模な負荷でもドキドキしない為のJava EE
大規模な負荷でもドキドキしない為のJava EE
 
ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入ゲームインフラコンテナ実践導入
ゲームインフラコンテナ実践導入
 
Jmeter20120421
Jmeter20120421Jmeter20120421
Jmeter20120421
 
Hudson (JJUG CCCにて)
Hudson (JJUG CCCにて)Hudson (JJUG CCCにて)
Hudson (JJUG CCCにて)
 
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
負荷対策しておもったことまとめ~JMeterでSocket.IOもいけるでよ~
 
Migration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjugMigration Guide from Java 8 to Java 11 #jjug
Migration Guide from Java 8 to Java 11 #jjug
 
アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門アプリ屋もDockerをドカドカ使おう ~ Docker入門
アプリ屋もDockerをドカドカ使おう ~ Docker入門
 

Similar to 実行可能JavaFXアプリケーションJAR(発表直前版)

JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project VisageJavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project VisageYuichi Sakuraba
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
PE-BANK
 
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
a know
 
Neo4j を Javaプログラムから使う
Neo4j を Javaプログラムから使うNeo4j を Javaプログラムから使う
Neo4j を Javaプログラムから使う
Masahiro Satake
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
Takahiro YAMADA
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
オラクルエンジニア通信
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
Norito Agetsuma
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
Kota Mizushima
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
Takashi Ito
 
WildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE Apps
Yoshimasa Tanabe
 
LLoT2016 Java Update
LLoT2016 Java UpdateLLoT2016 Java Update
LLoT2016 Java Update
torutk
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyToshiaki Maki
 
Maven2 plugin
Maven2 pluginMaven2 plugin
Maven2 plugin
Funato Takashi
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
JustSystems Corporation
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
なおき きしだ
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
minazou67
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
Akio Katayama
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
takezoe
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
minazou67
 

Similar to 実行可能JavaFXアプリケーションJAR(発表直前版) (20)

JavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project VisageJavaFX & GlassFish 勉強会 Project Visage
JavaFX & GlassFish 勉強会 Project Visage
 
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
Javaヂカラ #Java最新動向 -Java 11 の新機能やOracle Code One 2018 発の最新技術トレンドを一気にキャッチアップ-
 
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
はじめよう JavaFX 2.x(第3回 岡山Javaユーザー会)
 
Neo4j を Javaプログラムから使う
Neo4j を Javaプログラムから使うNeo4j を Javaプログラムから使う
Neo4j を Javaプログラムから使う
 
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
 
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajoOpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
OpenJDKソムリエと巡るJDKワイナリーツアー #sfggjp #javajo
 
Java in the World of Container by David Buck
Java in the World of Container by David BuckJava in the World of Container by David Buck
Java in the World of Container by David Buck
 
Quarkus入門
Quarkus入門Quarkus入門
Quarkus入門
 
Scalaでのプログラム開発
Scalaでのプログラム開発Scalaでのプログラム開発
Scalaでのプログラム開発
 
今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava今年はJava進化の年!今知っておくべき新しいJava
今年はJava進化の年!今知っておくべき新しいJava
 
WildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE AppsWildFly Swarm - Rightsize Your Java EE Apps
WildFly Swarm - Rightsize Your Java EE Apps
 
LLoT2016 Java Update
LLoT2016 Java UpdateLLoT2016 Java Update
LLoT2016 Java Update
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 
Maven2 plugin
Maven2 pluginMaven2 plugin
Maven2 plugin
 
最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug最新のJava言語仕様で見るモジュールシステム #jjug
最新のJava言語仕様で見るモジュールシステム #jjug
 
JavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJavaJavaOne2015報告またはこれからのJava
JavaOne2015報告またはこれからのJava
 
Java SE 再入門
Java SE 再入門Java SE 再入門
Java SE 再入門
 
SDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 WhireSDLoader SeasarCon 2009 Whire
SDLoader SeasarCon 2009 Whire
 
イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情イマドキの現場で使えるJavaライブラリ事情
イマドキの現場で使えるJavaライブラリ事情
 
Java EE 再入門
Java EE 再入門Java EE 再入門
Java EE 再入門
 

More from torutk

LL2021 Java update
LL2021 Java updateLL2021 Java update
LL2021 Java update
torutk
 
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
torutk
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
torutk
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
torutk
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lttorutk
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動torutk
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
torutk
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅
torutk
 

More from torutk (8)

LL2021 Java update
LL2021 Java updateLL2021 Java update
LL2021 Java update
 
Jjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafxJjugccc2017spring m6 javafx
Jjugccc2017spring m6 javafx
 
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
JJUG CCC 2016 Fall: World is not a square, rendering world coastline map with...
 
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
Java FXグラフィックスとアニメーション入門(JJUG CCC 2015 Spring G-7)
 
Java one 2013 sf 報告会lt
Java one 2013 sf 報告会ltJava one 2013 sf 報告会lt
Java one 2013 sf 報告会lt
 
Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動Jjug night seminar201208_lt_cxxからjvm起動
Jjug night seminar201208_lt_cxxからjvm起動
 
2012年javaメモリリーク
2012年javaメモリリーク2012年javaメモリリーク
2012年javaメモリリーク
 
2011年javaの旅
2011年javaの旅2011年javaの旅
2011年javaの旅
 

Recently uploaded

ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
ARISE analytics
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
kitamisetagayaxxx
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
sugiuralab
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
Yuki Miyazaki
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
Osaka University
 

Recently uploaded (10)

ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
【JSAI2024】LLMエージェントの人間との対話における反芻的返答の親近感向上効果_v1.1.pdf
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptxiMacwoSu_Gong_de_barabaranishitaHua_.pptx
iMacwoSu_Gong_de_barabaranishitaHua_.pptx
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
ヒアラブルへの入力を想定したユーザ定義型ジェスチャ調査と IMUセンサによる耳タッチジェスチャの認識
 
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
無形価値を守り育てる社会における「デー タ」の責務について - Atlas, Inc.
 
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
協働AIがもたらす業務効率革命 -日本企業が押さえるべきポイント-Collaborative AI Revolutionizing Busines...
 

実行可能JavaFXアプリケーションJAR(発表直前版)

  • 2. 発表者について @boochnich http://d.hatena.ne.jp/torutk/ • Java GUI歴 – jdk1.0時代はAWT – jdk1.1時代はAWT、Netscape IFC、Swing – jdk1.2以降はSwing、Java2D、(Java3D) • Java読書会BOF代表 – 1998年~毎月1回開催、通算164回、24冊目 http://www.javareading.com/bof/
  • 3. はじめに • JavaFXアプリケーションの起動方法 – スタンドアロン・プログラム – Webスタート – Webページに埋め込み – セルフ・コンテインメント・アプリケーショ ン javafxpackagerでスタンドアロン・プログラム (実行可能JAR)を作成する話です。
  • 4. アジェンダ • JDK 7u9の中にJavaFX 2.2.3 • NetBeansでJavaFXアプリケーションを作成 • コマンドでダブルクリック起動JARを作成 • (おまけ)OS固有のインストーラを作成
  • 5. JDK 7u9の中のJavaFX 2.2.3 C:Program FilesJavajdk1.7.0 (Windows OSの例) +-- bin JDKのディクレト | +-- javafxpackager.exe +-- jre リツリー中に | +-- lib JavaFX関連ファイ | +-- javafx.properties ルが含まれてい | +-- jfxrt.jar +-- lib ます。 +-- ant-javafx.jar +-- javafx-doclet.jar (抜粋につき、すべてのJavaFX関連ファイルを記載してはおりません)
  • 6. NetBeansでJavaFXアプリケーション(1/5) • NetBeansで新規プロジェクト[JavaFXアプリ ケーション]を選択し、雛形を作成 • プレゼンなので文字を大きく – CSSでチャレンジしてみます • NetBeans上でビルドして実行
  • 7. NetBeansでJavaFXアプリケーション(2/5) • ファイルエクスプローラでJARをダブルク リック • コマンドプロンプトからjava –jarコマンド 実行
  • 8. NetBeansでJavaFXアプリケーション(3/5) • ソースを自分でコンパイル、JAR化してみ る >javac -cp “C:Program Filesjavajdk1.7.0jrelibjfxrt.jar“ -d buildclasses -encoding UTF-8 srchellojjfxugHelloJjfxug.java >jar cvfm Hello.jar hello.mf -C buildclasses . マニフェストが追加されました hellojjfxug/を追加中です(入=0)(出=0)(0%格納されました) hellojjfxug/HelloJjfxug$1.classを追加中です(入=944)(出=539)(42%収縮されました) hellojjfxug/HelloJjfxug.classを追加中です(入=1413)(出=864)(38%収縮されました) hellojjfxug/HelloJjfxug.cssを追加中です(入=302)(出=214)(29%収縮されました) >java –jar Hello.jar Exception in thread "main" java.lang.NoClassDefFoundError: javafx/app lication/Application at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:791) 残念、動きませんでした。クラスパス指定が不足してます。
  • 9. NetBeansでJavaFXアプリケーション(4/5) • 違いはなにか? – NetBeansの生成したJARと比較してみる NetBeansの生成したJAR com/javafx/main/Main$1.class com/javafx/main/Main$2.class にだけ含まれるクラス com/javafx/main/Main.class ファイル群 com/javafx/main/NoJavaFXFallback.class Manifest-Version: 1.0 JavaFX-Version: 2.2 implementation-vendor: torutk implementation-title: HelloJjfxug NetBeansの生成したJAR implementation-version: 1.0 のMANIFEST.MF内容 JavaFX-Application-Class: hellojjfxug.HelloJjfxug JavaFX-Class-Path: HelloJjfxug.jar Created-By: JavaFX Packager Main-Class: com/javafx/main/Main
  • 10. NetBeansでJavaFXアプリケーション(5/5) • -Djavafx.verbose=true を指定しJARを起動する >java -Djavafx.verbose=true -jar distHelloJjfxug.jar : (中略) 1) Try existing classpath... ===== URL list file:/C:/work/HelloJjfxug/dist/HelloJjfxug.jar ===== 2) Try javafx.runtime.path property... 3) Look for cobundled JavaFX ... [java.home=C:Program FilesJavajdk1.7.0jre ===== URL list file:/C:/work/HelloJjfxug/dist/HelloJjfxug.jar file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/jfxrt.jar file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/deploy.jar file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/plugin.jar file:/C:/Program%20Files/Java/jdk1.7.0/jre/lib/javaws.jar ===== Try calling Class.forName(hellojjfxug.HelloJjfxug) using classLoader = java.net. URLClassLoader@6f404c51 found class: class hellojjfxug.HelloJjfxug : (後略)
  • 11. ダブルクリックで起動するJARの作り方 • javafxpackagerを使うと、実行可能JARを作 成できます。 >javafxpackager -createjar -nocss2bin Applicationクラスを継 -appclass hellojjfxug.HelloJjfxug 承したmainメソッドを -srcdir buildclasses 持つクラスを指定 -outdir . -srcdirですが、JARに含 -outfile HelloJjfxug-0.1 めるクラスファイルの あるディレクトリを指 定 > java –jar HelloJjfxug-0.1.jar JARファイル名(拡張 子不要)を指定 コマンドリファレンス http://docs.oracle.com/javafx/2/deployment/javafxpackager001.htm
  • 12. 情報源 • 「Oracle Blogs日本語のまとめ」より [JavaFX] Native packaging for JavaFX • http://orablogs-jp.blogspot.jp/2012/06/native- packaging-for-javafx.html • Oracle JavaFXドキュメント ”Deploying JavaFX Applications”より • http://docs.oracle.com/javafx/2/deployment/jfxp ub-deployment.htm 5.5 Create the Main Application JAR File など
  • 13. まとめ • JavaFXには、アプリケーションのインストール・ 実行・更新の仕組みがあります。 • NetBeans 7.3ではプロジェクトの設定のみで簡単 に利用できます。 • javafxpackagerコマンド(またはAntタスク)が提 供されています。 • eclipse派な人にはe(fx)clipseプラグインがありま す。
  • 14. おまけ MSI形式の作成 • javapackagerでWindows MSI形式のインスト ーラを作成可能です。 – 要WiX(Windows Installer XML) ・・・無償 • NetBeans 7.3 beta2でも可能です。 • 詳しくはブログで http://d.hatena.ne.jp/torutk/20121119
  • 15. おまけ2 RPM形式の作成 • javapackagerでLinux RPM形式のインストー ラを作成可能です。 – rpmbuildコマンドが実行できること • NetBeans 7.3 beta2でも可能です。
  • 16. サンプルプログラム注釈 CSSファイルの読み込み(ソースファイルと同じ場所に置く場合) Scene scene = new Scene(root, 300, 250); scene.getStylesheets().add( this.getClass().getResource("HelloJjfxug.css").toExternalForm()); CSSファイルの記述(Buttonクラスのフォント設定) .button { -fx-font-size: 24; -fx-font-family: Meiryo sans-serif; }
  • 17. NetBeansでJavaFXアプリケーション(補 1) • com.javafx.main.Mainクラスを調べる – システムプロパティjava.home – URLClassLoaderでApplication継承クラスをロー ドしmainメソッドを実行している。 ClassLoader urlClassLoader = new URLClassLoader(urls, null); : Thread.currentThread().setContextClassLoader(urlClassLoader); : Class appClass = Class.forName(appName, false, Thread.currentThread().getContextClassLoader()); : Method mainMethod = appClass.getMethod("main", new Class[] { new String[0].getClass() }); : mainMethod.invoke(null, new Object[] { args });