Re: [jruby-user] JRubyFX

Christian MICHON <[email protected]> Thu, 30 Apr 2015 08:56:01 +0200
Newsgroups gmane.comp.lang.jruby.user
Message-ID <CACx2yF9jLEQb1+4YFJB=6+UM9opMiUUMkNkLbmXk3C+UzZR+5Q@mail.gmail.com>
--001a11c32b04a994370514eb967f
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

In case you still wish to require or have a look at the jar file containing
the class ChangeListener, it's $JAVA_HOME/jre/lib/ext/jfxrt.jar

On Thu, Apr 30, 2015 at 8:49 AM, Christian MICHON <
[email protected]> wrote:

> Maybe I can help out.
>
> I've been toying for months now with Nashorn (jjs) but when I use Nashorn=
,
> I only use jjs and do not embed the JS engine inside another java-based
> interpreter.
>
> 1st: make sure your JDK8 is complete. It should not be the server JRE but
> the full JDK8.
>
> 2nd: to confirm javafx is included in your environment, try the following
> lines in jjs.
>
> If javafx is not in your JDK8, you'll see this:
>
> jjs> Java.type('javafx.beans.value.ChangeListener')
> java.lang.RuntimeException: java.lang.ClassNotFoundException:
> javafx.beans.value.ChangeListener
>
> In that case, it'll never work in jruby and you need to reinstall JDK8
> properly.
>
> This is how it should look like in jjs if javafx is included in your
> environment:
>
> jjs> Java.type('javafx.beans.value.ChangeListener')
> [JavaClass javafx.beans.value.ChangeListener]
>
> Once this is ok, you just need to add the following line inside your ruby
> script (preferably after require 'java') :
>
> include_class Java::JavafxBeansValue::ChangeListener
>
> Good luck!
>
> On Wed, Apr 29, 2015 at 8:51 PM, Rodrigo Botafogo <
> [email protected]> wrote:
>
>> Tom,
>>
>> No, this doesn=C2=B4t work.  Could I do a require in my Ruby code someho=
w?
>>
>> require 'javafx.beans.value.ChangeListener' does not work as it is
>> expecting a jar file, right?  Where is the jar for ChangeListener?
>>
>>
>> Thanks,
>>
>> 2015-04-29 15:36 GMT-03:00 Thomas E Enebo <[email protected]>:
>>
>> I am less of a help for JS but if you see how WebView is defined above
>>> you can perhaps do he same thing for ChangeListener is your JS code is
>>> barfing because it does not know what that type is:
>>>
>>> var ChangeListener =3D Java.type("javafx.beans.value.ChangeListener");
>>>
>>> -Tom
>>>
>>> On Wed, Apr 29, 2015 at 1:32 PM, Rodrigo Botafogo <
>>> [email protected]> wrote:
>>>
>>>> Hi Tom,
>>>>
>>>> Not sure I follow... so, the following function is defined inside a
>>>> javascript file and not in a JRuby script.  I can=C2=B4t do this impli=
cit
>>>> coercion.  I think I should load the ChangeListener interface and make=
 it
>>>> available to javascript.  I=C2=B4m still learning all this, so I might=
 just be
>>>> confused.  If this is any help, I=C2=B4m just trying to follow the blo=
g:
>>>> https://blogs.oracle.com/nashorn/entry/porting_from_the_browser_to,
>>>> but instead of using jjs, I=C2=B4m driving nashorn through JRuby.
>>>>
>>>>
>>>> function WebViewWrapper(onload) {
>>>>     var This =3D this;
>>>>     var WebView =3D Java.type("javafx.scene.web.WebView");
>>>>     var webview =3D new WebView();
>>>>
>>>>     This.webview =3D webview;
>>>>     This.engine =3D webview.engine;
>>>>     This.window =3D undefined;
>>>>     This.document =3D undefined;
>>>>
>>>>     // Make sure the JavaScript is enabled.
>>>>     This.engine.javaScriptEnabled =3D true;
>>>>
>>>>     // Complete initialization when page is loaded.
>>>>     This.engine.loadWorker.stateProperty().addListener(new
>>>> ChangeListener() {
>>>>         changed: function(value, oldState, newState) {
>>>>             if (newState =3D=3D Worker.State.SUCCEEDED) {
>>>>                 This.document =3D
>>>> wrap(This.engine.executeScript("document"));
>>>>                 This.window =3D wrap(This.engine.executeScript("window=
"));
>>>>
>>>>                 // Call users onload function.
>>>>                 if (onload) {
>>>>                     onload(This);
>>>>                 }
>>>>             }
>>>>         }
>>>>     });
>>>>
>>>>
>>>> Thanks....
>>>>
>>>> 2015-04-29 15:20 GMT-03:00 Thomas E Enebo <[email protected]>:
>>>>
>>>> javafx.beans.value.ChangeListener is an interface so with implicit
>>>>> closure coercion you should be able to:
>>>>>
>>>>>
>>>>> ```ruby
>>>>> This.engine.load_worker.state_property.add_listener do |observable,
>>>>> old_value, new_value|
>>>>>   #...
>>>>> end
>>>>> ```
>>>>>
>>>>> -Tom
>>>>>
>>>>>
>>>>> On Wed, Apr 29, 2015 at 11:42 AM, Rodrigo Botafogo <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Hello....
>>>>>>
>>>>>> Sorry if this isn=C2=B4t the right place to post questions about JRu=
byFX.
>>>>>>
>>>>>> I=C2=B4m trying to write a JRubyFX application.  I=C2=B4m following =
a post from
>>>>>> Oracle to try to learn JavaFX and JRubyFx.  In the post, in a js fil=
e there
>>>>>> is the following lines:
>>>>>>
>>>>>>  // Complete initialization when page is loaded.
>>>>>>   This.engine.loadWorker.stateProperty().addListener(new ChangeListe=
ner() {
>>>>>>
>>>>>>
>>>>>> ChangeListener() is not found when I run the application.  I
>>>>>> understand that I should load javafx/beans, but I don=C2=B4t know ho=
w to do this
>>>>>> with JRubyFX.  Can anybody help me here or point to the right list t=
o ask
>>>>>> this question?
>>>>>>
>>>>>> Thanks
>>>>>> --
>>>>>> Rodrigo Botafogo
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>
>>>>>
>>>>> --
>>>>> blog: http://blog.enebo.com       twitter: tom_enebo
>>>>> mail: [email protected]
>>>>>
>>>>
>>>>
>>>>
>>>> --
>>>> Rodrigo Botafogo
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> blog: http://blog.enebo.com       twitter: tom_enebo
>>> mail: [email protected]
>>>
>>
>>
>>
>> --
>> Rodrigo Botafogo
>>
>>
>>
>>
>
>
> --
> Christian
>



--=20
Christian

--001a11c32b04a994370514eb967f
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr">In case you still wish to require or have a look at the ja=
r file containing the class ChangeListener, it&#39;s $JAVA_HOME/jre/lib/ext=
/jfxrt.jar</div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">O=
n Thu, Apr 30, 2015 at 8:49 AM, Christian MICHON <span dir=3D"ltr">&lt;<a h=
ref=3D"mailto:[email protected]" target=3D"_blank">christian.micho=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gmail_quote" styl=
e=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div di=
r=3D"ltr">Maybe I can help out.<div><br></div><div>I&#39;ve been toying for=
 months now with Nashorn (jjs) but when I use Nashorn, I only use jjs and d=
o not embed the JS engine inside another java-based interpreter.<div><br></=
div><div>1st: make sure your JDK8 is complete. It should not be the server =
JRE but the full JDK8.</div><div><br></div><div>2nd: to confirm javafx is i=
ncluded in your environment, try the following lines in jjs.</div><div><br>=
</div><div>If javafx is not in your JDK8, you&#39;ll see this:</div><div><b=
r></div><div><div>jjs&gt; Java.type(&#39;javafx.beans.value.ChangeListener&=
#39;)<br></div><div>java.lang.RuntimeException: java.lang.ClassNotFoundExce=
ption: javafx.beans.value.ChangeListener</div></div><div><br></div><div>In =
that case, it&#39;ll never work in jruby and you need to reinstall JDK8 pro=
perly.</div><div><br></div><div>This is how it should look like in jjs if j=
avafx is included in your environment:</div><div><br></div><div><div>jjs&gt=
; Java.type(&#39;javafx.beans.value.ChangeListener&#39;)<br></div><div>[Jav=
aClass javafx.beans.value.ChangeListener]</div></div><div><br></div><div>On=
ce this is ok, you just need to add the following line inside your ruby scr=
ipt (preferably after require &#39;java&#39;) :</div></div><div><br></div><=
div>include_class Java::JavafxBeansValue::ChangeListener<br></div><div><br>=
</div><div>Good luck!</div></div><div class=3D"gmail_extra"><div><div class=
=3D"h5"><br><div class=3D"gmail_quote">On Wed, Apr 29, 2015 at 8:51 PM, Rod=
rigo Botafogo <span dir=3D"ltr">&lt;<a href=3D"mailto:rodrigo@rodrigobotafo=
go.com" target=3D"_blank">[email protected]</a>&gt;</span> wrote:=
<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Tom,<div><br></div><div=
>No, this doesn=C2=B4t work.=C2=A0 Could I do a require in my Ruby code som=
ehow?=C2=A0</div><div><br></div><div>require &#39;javafx.beans.value.Change=
Listener&#39; does not work as it is expecting a jar file, right?=C2=A0 Whe=
re is the jar for ChangeListener?</div><div><br></div><div><br></div><div>T=
hanks,</div></div><div class=3D"gmail_extra"><br><div class=3D"gmail_quote"=
>2015-04-29 15:36 GMT-03:00 Thomas E Enebo <span dir=3D"ltr">&lt;<a href=3D=
"mailto:[email protected]" target=3D"_blank">[email protected]</a>&gt;<=
/span>:<div><div><br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 =
0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><=
div>I am less of a help for JS but if you see how WebView is defined above =
you can perhaps do he same thing for ChangeListener is your JS code is barf=
ing because it does not know what that type is:<br><br></div>var ChangeList=
ener =3D Java.type(&quot;javafx.beans.value.ChangeListener&quot;);<br><br><=
/div>-Tom<br></div><div><div><div class=3D"gmail_extra"><br><div class=3D"g=
mail_quote">On Wed, Apr 29, 2015 at 1:32 PM, Rodrigo Botafogo <span dir=3D"=
ltr">&lt;<a href=3D"mailto:[email protected]" target=3D"_blank">r=
[email protected]</a>&gt;</span> wrote:<br><blockquote class=3D"gm=
ail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-le=
ft:1ex"><div dir=3D"ltr">Hi Tom,<div><br></div><div>Not sure I follow... so=
, the following function is defined inside a javascript file and not in a J=
Ruby script.=C2=A0 I can=C2=B4t do this implicit coercion.=C2=A0 I think I =
should load the ChangeListener interface and make it available to javascrip=
t.=C2=A0 I=C2=B4m still learning all this, so I might just be confused.=C2=
=A0 If this is any help, I=C2=B4m just trying to follow the blog:=C2=A0<a h=
ref=3D"https://blogs.oracle.com/nashorn/entry/porting_from_the_browser_to" =
target=3D"_blank">https://blogs.oracle.com/nashorn/entry/porting_from_the_b=
rowser_to</a>, but instead of using jjs, I=C2=B4m driving nashorn through J=
Ruby.</div><div><br></div><div><br></div><div><div>function WebViewWrapper(=
onload) {</div><div>=C2=A0 =C2=A0 var This =3D this;</div><div>=C2=A0 =C2=
=A0 var WebView =3D Java.type(&quot;javafx.scene.web.WebView&quot;);</div><=
div>=C2=A0 =C2=A0 var webview =3D new WebView();</div><div>=C2=A0 =C2=A0=C2=
=A0</div><div>=C2=A0 =C2=A0 This.webview =3D webview;</div><div>=C2=A0 =C2=
=A0 This.engine =3D webview.engine;</div><div>=C2=A0 =C2=A0 This.window =3D=
 undefined;</div><div>=C2=A0 =C2=A0 This.document =3D undefined;</div><div>=
=C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 // Make sure the JavaScript is =
enabled.</div><div>=C2=A0 =C2=A0 This.engine.javaScriptEnabled =3D true;</d=
iv><span><div>=C2=A0 =C2=A0=C2=A0</div><div>=C2=A0 =C2=A0 // Complete initi=
alization when page is loaded.</div><div>=C2=A0 =C2=A0 This.engine.loadWork=
er.stateProperty().addListener(new ChangeListener() {</div></span><div>=C2=
=A0 =C2=A0 =C2=A0 =C2=A0 changed: function(value, oldState, newState) {</di=
v><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 if (newState =3D=3D Worker=
.State.SUCCEEDED) {</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 This.document =3D wrap(This.engine.executeScript(&quot;document&=
quot;));</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
This.window =3D wrap(This.engine.executeScript(&quot;window&quot;));</div><=
div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=C2=A0</div><div=
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 // Call users onlo=
ad function.</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 if (onload) {</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 onload(This);</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 }</div><div>=C2=A0 =C2=A0 =C2=A0 =C2=A0 }</div><div>=C2=A0 =C2=
=A0 });</div></div><div><br></div><div><br></div><div>Thanks....</div></div=
><div class=3D"gmail_extra"><br><div class=3D"gmail_quote">2015-04-29 15:20=
 GMT-03:00 Thomas E Enebo <span dir=3D"ltr">&lt;<a href=3D"mailto:tom.enebo=
@gmail.com" target=3D"_blank">[email protected]</a>&gt;</span>:<div><div>=
<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-lef=
t:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr"><div><div><div>javafx.b=
eans.value.ChangeListener is an interface so with implicit closure coercion=
 you should be able to:<br></div><div><br><br></div>```ruby<br></div>This.e=
ngine.load_worker.state_property.add_listener do |<code>observable, old_val=
ue, new_value|<br>=C2=A0 #...<br></code></div><code>end<br></code><div><div=
>```<br><br></div><div>-Tom<br><br></div></div></div><div class=3D"gmail_ex=
tra"><div><div><br><div class=3D"gmail_quote">On Wed, Apr 29, 2015 at 11:42=
 AM, Rodrigo Botafogo <span dir=3D"ltr">&lt;<a href=3D"mailto:rodrigo@rodri=
gobotafogo.com" target=3D"_blank">[email protected]</a>&gt;</span=
> wrote:<br><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;bo=
rder-left:1px #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hello....=C2=A0=
<div><br></div><div>Sorry if this isn=C2=B4t the right place to post questi=
ons about JRubyFX. =C2=A0</div><div><br></div><div>I=C2=B4m trying to write=
 a JRubyFX application.=C2=A0 I=C2=B4m following a post from Oracle to try =
to learn JavaFX and JRubyFx.=C2=A0 In the post, in a js file there is the f=
ollowing lines:</div><div><br></div><div><pre style=3D"margin-top:10px;marg=
in-bottom:10px;color:rgb(85,85,85);font-size:12px;line-height:18px"> // Com=
plete initialization when page is loaded.
  This.engine.loadWorker.stateProperty().addListener(new ChangeListener()=
=C2=A0{</pre><pre style=3D"margin-top:10px;margin-bottom:10px;color:rgb(85,=
85,85);font-size:12px;line-height:18px"><br></pre><div>ChangeListener() is =
not found when I run the application.=C2=A0 I understand that I should load=
 javafx/beans, but I don=C2=B4t know how to do this with JRubyFX.=C2=A0 Can=
 anybody help me here or point to the right list to ask this question?</div=
><div><br></div><div>Thanks</div><span><font color=3D"#888888">-- <br><div>=
<div dir=3D"ltr">Rodrigo Botafogo<div><br><br><div><br></div></div></div></=
div>
</font></span></div></div>
</blockquote></div><br><br clear=3D"all"><br></div></div><span><font color=
=3D"#888888">-- <br><div>blog: <a href=3D"http://blog.enebo.com" target=3D"=
_blank">http://blog.enebo.com</a>=C2=A0 =C2=A0 =C2=A0=C2=A0 twitter: tom_en=
ebo<br>mail: <a href=3D"mailto:[email protected]" target=3D"_blank">tom.e=
[email protected]</a></div>
</font></span></div>
</blockquote></div></div></div><span><font color=3D"#888888"><br><br clear=
=3D"all"><div><br></div>-- <br><div><div dir=3D"ltr">Rodrigo Botafogo<div><=
br><br><div><br></div></div></div></div>
</font></span></div>
</blockquote></div><br><br clear=3D"all"><br>-- <br><div>blog: <a href=3D"h=
ttp://blog.enebo.com" target=3D"_blank">http://blog.enebo.com</a>=C2=A0 =C2=
=A0 =C2=A0=C2=A0 twitter: tom_enebo<br>mail: <a href=3D"mailto:tom.enebo@gm=
ail.com" target=3D"_blank">[email protected]</a></div>
</div>
</div></div></blockquote></div></div></div><span><font color=3D"#888888"><b=
r><br clear=3D"all"><div><br></div>-- <br><div><div dir=3D"ltr">Rodrigo Bot=
afogo<div><br><br><div><br></div></div></div></div>
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div></div></div><span c=
lass=3D"HOEnZb"><font color=3D"#888888">-- <br><div>Christian<br></div>
</font></span></div>
</blockquote></div><br><br clear=3D"all"><div><br></div>-- <br><div class=
=3D"gmail_signature">Christian<br></div>
</div>

--001a11c32b04a994370514eb967f--