スキップしてメイン コンテンツに移動

e(fx)clipseでJavaFXのjarファイル作成

JavaFXのjarファイル作成で、以前はEclipseのメニューの File > Export > Runnable JAR fileで出力したjarファイルでWindowsでもLinux上でも実行できてた気がするんですが、

最近Windows上のEclipseで作成したJavaFXのjarファイルをLinux Beanで実行すると以下のようなエラーで実行できませんでした。

java -jar hello.jar
java.lang.UnsatisfiedLinkError: com.sun.glass.ui.gtk.GtkTimer._start(Ljava/lang/Runnable;I)J
     at com.sun.glass.ui.gtk.GtkTimer._start(Native Method)
     at com.sun.glass.ui.Timer.start(Timer.java:69)
     at com.sun.javafx.tk.quantum.QuantumToolkit.finishLaunching(QuantumToolkit.java:363)
     at com.sun.glass.ui.gtk.GtkApplication._runLoop(Native Method)
     at com.sun.glass.ui.gtk.GtkApplication$3$1.run(GtkApplication.java:82)
     at java.lang.Thread.run(Thread.java:745)

これは別にLinux上でダメというわけでなくて、他のWindowsでやっても同じエラーが出ました。自分の開発環境以外でやるとダメのようです。

調べてみると、
結論としてはビルドが必要というよな話が見つかります。せっかく作ったのにプロジェクトを作成しなおさないといけないのかと思ってたんですが、僕の環境ではe(fx)clipse使ってましてこのプラグインで何かできないかと。確かJavaFXのプロジェクトとして作成したので、以下のような構成になってます。


この中にあるbuild.fxbuildをダブルクリックすると、Overviewタブの右上に「Generate ant build.xml and run」というリンクがあって、これをクリックしてくれるとビルドできます。
が、エラーになりました。
BUILD FAILED
D:\hoge\CPUMonitor\build\build.xml:130: Problem: failed to create task or type javafx:com.sun.javafx.tools.ant:resources
Cause: The name is undefined.
Action: Check the spelling.
Action: Check that any custom tasks/types have been declared.
Action: Check that any <presetdef>/<macrodef> declarations have taken place.
No types or tasks have been defined in this namespace yet

どれが決めてだったかわかりませんが、以下を見直すとビルドできました。
  • JAVA_HOME:JDKのディレクトリ → JDK内のJREのディレクトリ
  • メニュー > Window > Preferences > Java > Installed JREs のLocationを上記同様JDK内のJREディレクトリに
  • build.fxbuildのOverviewタグの*印のところに記入
jarファイルは、${project}/build/dist 内にあります。
しかもjarファイルのサイズが、Runnable JAR fileで出力した時が9MBあったのに、ビルドで生成したjarファイルは56KBととても良いです。
このjarファイルで、他のWindowsでもLinux上でも実行して動作を確認できました。
※ネイティブの実行ファイルも作れそうでしたが試してません。

あとは、これをどうやって配布したいいんですかね...

参考

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。