注意
この情報はすでに陳腐化した。
Windows10 64bitにおいて、
- jdk-8u121
- jruby 9.1.7.0
- jrubyfx 1.1.1
の環境でjrubyfxが動作することを確認している。
前置き
以下、Windows7 64bitにおいて、
- jdk-8u40
- jruby 1.17.16.1
- jrubyfx 1.1.1
の環境では、jrubyfxが動いていた。
ところが、jdkとjrubyをアップデートしたところ、
下のエラーが発生して、jrubyfxを使用したプログラムが動かなくなってしまった。
NameError: cannot load Java class com.sun.javafx.Logging
for_name at org/jruby/javasupport/JavaClass.java:1286
get_proxy_class at org/jruby/javasupport/JavaUtilities.java:34
java_import at file:/C:/jruby-1.7.18/lib/jruby.jar!/jruby/java/core_ext/object.rb:27
map at org/jruby/RubyArray.java:2412
調査
どうも、Javaのインテグレーションに伴うjrubyの問題なようだ。
https://github.com/jruby/jrubyfx/issues/95
https://github.com/jruby/jruby/issues/3366
jrubyfxが動くjdkとjrubyのバージョンは
jruby 1.7.16.1を固定し、jrubyfxが動作するJDKのバージョンを調査した。
結果 | バージョン |
---|---|
NameError | 8u60, 8u66 |
無事に動作した | 8u51とそれ以前 |
次に、jdk-8u51を固定し、jrubyfxが動作するjrubyのバージョンを調査した。
結果 | バージョン |
---|---|
無事に動作した | 1.7.18とそれ以前 |
警告(※1) | 1.7.19 - 1.7.22 |
別のエラー(※2) | 9.0.0.0 - 9.0.4.0 |
※1
io/console not supported; tty will not be manipulated
https://github.com/jruby/jruby/issues/2944
https://github.com/asciidoctor/asciidoctorj/issues/401
※2
Exception running Application:
\#<NameError: uninitialized constant Java::JavafxStage::Stage::Scene>
C:/jruby-9.0.4.0/lib/ruby/gems/shared/gems/jrubyfx-1.1.1-java/lib/jrubyfx/core_ext/stage.rb:75:in `layout_scene'
結論
jrubyfxを使用するなら、2015/12/02現在、
- jdk-8u51
- jruby 1.7.18
- jrubyfx 1.1.1
で使用すること。
最新版のjdkが入っている環境に配布するにはどうすればいいんだろう。
あんまり話題になっていないところから考えて、みなさん、あまりjrubyfx使ってないのかな。