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'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"><<a h= ref=3D"mailto:[email protected]" target=3D"_blank">christian.micho= [email protected]</a>></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'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'll see this:</div><div><b= r></div><div><div>jjs> Java.type('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'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>= ; Java.type('javafx.beans.value.ChangeListener')<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 'java') :</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"><<a href=3D"mailto:rodrigo@rodrigobotafo= go.com" target=3D"_blank">[email protected]</a>></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 'javafx.beans.value.Change= Listener' 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"><<a href=3D= "mailto:[email protected]" target=3D"_blank">[email protected]</a>><= /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("javafx.beans.value.ChangeListener");<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"><<a href=3D"mailto:[email protected]" target=3D"_blank">r= [email protected]</a>></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("javafx.scene.web.WebView");</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("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("window"));</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"><<a href=3D"mailto:tom.enebo= @gmail.com" target=3D"_blank">[email protected]</a>></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"><<a href=3D"mailto:rodrigo@rodri= gobotafogo.com" target=3D"_blank">[email protected]</a>></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--