Not sure if it would help, but could you create a bootstrap application that 
calls DestkopApplicationContext.main()? Many of our sample applications do this:

http://pivot.apache.org/1.4/docs/api/org/apache/pivot/wtk/DesktopApplicationContext.html#main(java.lang.Class,%20java.lang.String[])


On Apr 21, 2010, at 1:46 AM, Chris Duncan wrote:

> Hi,
> 
> I'm trying to experiment with JRuby and Apache Pivot in order to produce a 
> JRuby script example that uses Apache Pivot to create a GUI. I got stuck so I 
> posted a question on the JRuby user mailing list and got this reply from Tom 
> Enebo  -
> 
> ==== Reply ====
> 
> I spent a little time trying to get this to work and they are doing
> something unfun with class loaders :(
> 
> Here is code which almost works:
> ----- code ----
> require 'java'
> 
> java_import java.awt.Font
> java_import org.apache.pivot.wtk.DesktopApplicationContext
> java_import org.apache.pivot.wtk.HorizontalAlignment
> java_import org.apache.pivot.wtk.VerticalAlignment
> 
> class HelloJava
>  include org.apache.pivot.wtk.Application
> 
>  def startup(display, properties)
>    label = org.apache.pivot.wtk.Label.new.tap do |l|
>      l.text = "Nom Nom Nom!"
>      l.styles.tap do |s|
>        s.put("font", Font.new("Arial", Font::BOLD, 24))
>        s.put("color", java.awt.Color::RED)
>        s.put("horizontalAlignment", HorizontalAlignment::CENTER)
>        s.put("verticalAlignment", VerticalAlignment::CENTER)
>      end
>    end
> 
>    @window = org.apache.pivot.wtk.Window.new.tap do |w|
>      w.content = label
>      w.title = "HEH HEH HEH!"
>      w.maximized = true
>      w.open(display);
>    end
>  end
> 
>  def shutdown(optional)
>    window.close if @window
>    false
>  end
> 
>  def suspend; end
>  def resume; end
> end
> 
> HelloJava.new # Unfortunately Java interface not really implemented until 
> first construction
> DesktopApplicationContext.main(HelloJava.to_java(java.lang.Class), 
> [].to_java(:string))
> 
> ----- code ----
> 
> Invocation:
> CLASSPATH=lib/pivot-core-1.4.jar:lib/pivot-wtk-1.4.jar:lib/pivot-wtk-terra-1.4.jar:.
> jruby hello.rb
> 
> 
> ---- The error ---
> 
> java.lang.ClassNotFoundException: HelloJava_591025772
>       at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
>       at java.security.AccessController.doPrivileged(Native Method)
>       at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:315)
>       at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:330)
>       at java.lang.ClassLoader.loadClass(ClassLoader.java:250)
>       at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:398)
>       at java.lang.Class.forName0(Native Method)
>       at java.lang.Class.forName(Class.java:169)
>       at 
> org.apache.pivot.wtk.DesktopApplicationContext$HostFrame.processWindowEvent(Unknown
> Source)
>       at java.awt.Window.processEvent(Window.java:1820)
>       at java.awt.Component.dispatchEventImpl(Component.java:4714)
>       at java.awt.Container.dispatchEventImpl(Container.java:2143)
>       at java.awt.Window.dispatchEventImpl(Window.java:2475)
>       at java.awt.Component.dispatchEvent(Component.java:4544)
>       at java.awt.EventQueue.dispatchEvent(EventQueue.java:635)
>       at 
> java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296)
>       at 
> java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211)
>       at 
> java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201)
>       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196)
>       at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188)
>       at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
> 
> -----
> 
> So wtk eventing appears to be doing a Class.forName on HelloJava for
> some reason (perhaps to not store and pass around original class
> reference), and it cannot find it since our classloader loaded it and
> not their's.
> 
> If you can tell pivot to use our classloader somehow or get some help
> on the pivot side to better understand the issue then perhaps we can
> help more.  You could use jrubyc --java to generate a Java stub class
> as a workaround (then it can load that Java class in its classloader),
> but it seems like the above code should work in an ideal world.
> 
> Maybe someone on this list may have an idea...
> 
> -Tom
> 
> ==== End of Reply ====
> 
> Is there anybody on this list who can suggest a way to get around this 
> classloader issue? Any help would be greatly appreciated.
> 
> Regards,
> 
> Chris
> 
> 

Reply via email to