質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

5160閲覧

javapackagerでexeファイルを作成しても、インストール後に起動できない

serona

総合スコア25

JAR

JAR(又はJava ARchive)はコンパイルされた複数のJavaバイトコード及び関連ファイルのリソースを一つのファイルに統合したものです。JARファイルはZIPファイルのフォーマットで構築されています。

JavaFX

JavaFXとは、Java仮想マシン上で動作するリッチインターネットアプリケーション (RIA) のGUIライブラリです。Swingとは異なり、FXMLと呼ばれる XMLとCSSを併用してデザインを記述します。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

3クリップ

投稿2017/05/16 02:13

編集2022/01/12 10:55

いつもお世話になっています。
JavaFXでGUIアプリケーションを作成しています。
開発環境はeclipceを使用してます。

私は、MacOS XとWindows7(64bit)のパソコンを持っており
アプリケーションは、MacOS Xの方で作成しました。

作りたかった機能があらかた完成し、
eclipseで実行しても問題なく動作しているようなので、
「エクスポート」>「実行可能JARファイル」として出力したのですが、
MacでもWindowsでも、正しく起動しません。
追記:この現象は、「生成されるJARに必須ライブラリーをパッケージ」を選択した場合のみで発生します。

「エクスポート」>「JARファイル」として出力すると、
MacでもWindowsでも、
問題なく起動し、アプリケーションを使用できます。

Windowsの方は、実行可能jarファイルを起動するために、
Javaを再インストールしたり、64bit用のJavaをインストールしたり
環境変数の設定をしたりと色々触ってみたりみたのですが、ダメでした。

fxmlファイルについては、JARファイルでエクスポートすれば起動できることと
ほとんど「JavaFx Scene Builder2.0」で作成していたため
ここには原因がないのではないかと思い、細かい確認などはしていないです。

追記:eclipseにて、「実行可能JARファイル」をエクスポートする際、
「生成されるJARに必須ライブラリーを抽出」や
「生成されるJARの隣のサブフォルダーに必須ライブラリーをコピー」を選択していた場合は、
jarファイルが問題なく起動しました。

###追記:目的
後々は、javapackagerを使って
自己完結型アプリケーションにしたいです。

http://aoe-tk.hatenablog.com/entry/2015/12/19/170651

上記のサイトを参考に、起動できるJARファイルから
javapackagerを使ってexeファイルを作成してみましたが
インストール後、「No main class specified」「Find angle to launch JVM」
というメッセージが出るだけで、こちらも起動しません。

まだ、エクスポート時の方法によって起動できない原因は分かっていませんが
最終目的は、自己完結型アプリケーションとしてのパッケージなので、
それを達成するための原因は別件かと思い、タイトルも変更しました。
恐れ入りますが、何卒よろしくお願いします。><

###エラーメッセージ
コマンドプロンプトで

java -jar アプリケーション名.jar > log.txt 2>&1

このように入力すると、
eclipseで、「実行可能JARファイル」の
「生成されるJARに必須ライブラリーをパッケージ」を選択してエクスポートした場合のみ、
以下のようなエラーが出力され、ウィンドウなどが全く表示されません。

ただ、タスクマネージャーを確認すると、「java.exe」が起動しています。
ダブルクリックで起動した場合は、「javaw.exe」が起動します。
どちらも、「Java(TM) Platform SE binary」となってます。
これらは、エラーが出た後、タスクマネージャーから終了させるまで動いているみたいです。

javafx.fxml.LoadException: application/MainForm.fxml:26 at javafx.fxml.FXMLLoader.constructLoadException(FXMLLoader.java:2601) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2579) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2441) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3214) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3175) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3148) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3124) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:3104) at javafx.fxml.FXMLLoader.load(FXMLLoader.java:3097) at application.Main.start(Main.java:21) at com.sun.javafx.application.LauncherImpl.lambda$launchApplication1$162(LauncherImpl.java:863) at com.sun.javafx.application.PlatformImpl.lambda$runAndWait$175(PlatformImpl.java:326) at com.sun.javafx.application.PlatformImpl.lambda$null$173(PlatformImpl.java:295) at java.security.AccessController.doPrivileged(Native Method) at com.sun.javafx.application.PlatformImpl.lambda$runLater$174(PlatformImpl.java:294) at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95) at com.sun.glass.ui.win.WinApplication._runLoop(Native Method) at com.sun.glass.ui.win.WinApplication.lambda$null$148(WinApplication.java:191) at java.lang.Thread.run(Unknown Source) Caused by: java.net.MalformedURLException: Could not open InputStream for URL 'rsrc:ActionForm.fxml' at org.eclipse.jdt.internal.jarinjarloader.RsrcURLConnection.getInputStream(RsrcURLConnection.java:46) at java.net.URL.openStream(Unknown Source) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2440) at javafx.fxml.FXMLLoader.access$2700(FXMLLoader.java:103) at javafx.fxml.FXMLLoader$IncludeElement.constructValue(FXMLLoader.java:1143) at javafx.fxml.FXMLLoader$ValueElement.processStartElement(FXMLLoader.java:746) at javafx.fxml.FXMLLoader.processStartElement(FXMLLoader.java:2707) at javafx.fxml.FXMLLoader.loadImpl(FXMLLoader.java:2527) ... 17 more

###追記:MANIFEST.MF
こちらが「実行可能JARファイル」でエクスポートした.jarファイルから
MANIFEST.MFを展開したものです!

Manifest-Version: 1.0 Rsrc-Class-Path: ./ org.eclipse.fx.ide.css.jfx8_2.3.0.201603030809.jar Class-Path: . Rsrc-Main-Class: application.Main Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader

こちらが「JARファイル」でエクスポートした.jarファイルから
MANIFEST.MFを展開したものです!

Manifest-Version: 1.0 Main-Class: application.Main

###追記:javapackager
「管理者として実行」でコマンドプロンプトを起動して、以下のように入力しています。

javapackager -deploy -native exe -outdir C:\test -outfile test -srcdir C:\test -srcfiles test.jar -appclass application.Main -name test

C:\testの中にJARファイルを保存しています。出力先も同じC:\testです。
この時点では、特にエラーなどは確認されず、
ファイルは以下のディレクトリに保存されました、みたいなメッセージが出てきて終了しています。
作成された.exeファイルも、インストールやアンインストール時の動作に問題はないように見えます。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

スタックトレースを拝見するとFXMLの場所の指定の仕方に起因する問題に見えます。

java.net.MalformedURLException: Could not open InputStream for URL 'rsrc:ActionForm.fxml'

とありますね。自分は普段次のように単純にメインクラスパッケージにFXMLを置く前提でスタートメソッドを書きます。

java

1package com.ksoh.myapp; 2... 3public class MyApplication extends Application { 4 @Override 5 public void start(Stage primaryStage) throws Exception { 6 FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml")); 7 Parent root = loader.load(); 8 ... 9 } 10}

IDEはeclipseではなくIntelliJなのですが、「JavaFXアプリケーション」という専用のパッケージャーを用いてJavaFXアプリケーションに関する諸元を入力した場合のMANIFEST.MFは例えば次のようになります。(太字がJavaFXアプリケーションの諸元として指定した内容です)

Manifest-Version: 1.0
Implementation-Title: KSOH MyApplication
Implementation-Version:
Permissions: sandbox
JavaFX-Version: 8.0
Class-Path:
Created-By: JavaFX Packager
Implementation-Vendor: KSOH
Main-Class: com.ksoh.myapp.MyApplication

こうして生成されたjarをWindows10のexplore上でダブルクリックすると普通に起動できます。MANIFEST.MFの中で肝心と思えるのはMain-Classの指定です。ここが正しく設定されてさえいればJavaFXアプリケーションでも普通のアプリケーションでもダブルクリックで起動できる気がします。

質問者さんはeclipseにより2つの違ったjarパッケージングをされているようですが、動く場合と動かない場合のMANIFEST.MFの違いを確認してみるとよいと思います。(質問を編集してその2つを記載されるとeclipseを使っていない閲覧者のみなさんにも内容が把握できると思います)


ご存知と思いますが、生成されたjarファイルがx.jarだとするとターミナル上で

jar xvf x.jar META-INF/MANIFEST.MF

とするとjarの中のMANIFEST.MFが展開されるので中身を確認できます。

投稿2017/05/16 04:23

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

serona

2017/05/16 05:08

早々のご回答、ありがとうございます!! まずは、ご教示どおりMANIFEST.MFの展開をして、編集させて頂きました。 起動ができない、実行可能JARファイルの方が 「Rsrc-Main-Class: application.Main Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader」 となっており、この「Main-Class」が「application.Main」である必要がある、ということかなと思っています。 まずは「MANIFEST.MF」について調べてみたいと思います! 取り急ぎ、お礼まで失礼します!><
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問