2015-11-10 59 views
1
//Job.java 
package br.eti.mribeiro; 

public interface Job { 
    void teste(); 
} 


//Teste.java 
package br.eti.mribeiro; 

public class Teste { 
    public void executaJob(Class<? extends Job> classe){ 
     try { 
      Job job = classe.newInstance(); 
      job.teste(); 
     } catch (InstantiationException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IllegalAccessException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

    } 
} 

#jruby_teste.rb 
require File.join(File.dirname(File.expand_path(__FILE__)), 'teste_jruby.jar') 

java_import 'br.eti.mribeiro.Job' 
java_import 'br.eti.mribeiro.Teste' 

class TesteJob 
    include Job 
    def teste 
    puts "123456" 
    end 
end 
Teste.new.executaJob(TesteJob.class) 

我想上面的代碼是相當自我解釋,我哈瓦實現的Java接口一個Ruby類,我想通過這個類返回的Java類。但是,執行ruby代碼時,我得到以下錯誤:JRUBY - 傳遞一個Ruby類的泛型參數

java.lang.InstantiationException: org.jruby.RubyClass 
     at java.lang.Class.newInstance(Class.java:359) 
     at br.eti.mribeiro.Teste.executaJob(Teste.java:6) 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
     at java.lang.reflect.Method.invoke(Method.java:606) 
     at org.jruby.javasupport.JavaMethod.invokeDirectWithExceptionHandling(JavaMethod.java:452) 
     at org.jruby.javasupport.JavaMethod.invokeDirect(JavaMethod.java:313) 
     at org.jruby.java.invokers.InstanceMethodInvoker.call(InstanceMethodInvoker.java:45) 
     at org.jruby.runtime.callsite.CachingCallSite.cacheAndCall(CachingCallSite.java:313) 
     at org.jruby.runtime.callsite.CachingCallSite.call(CachingCallSite.java:163) 
     at teste.invokeOther18:executaJob(teste.rb) 
     at teste.RUBY$script(teste.rb:14) 
     at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:599) 
     at org.jruby.ir.Compiler$1.load(Compiler.java:111) 
     at org.jruby.Ruby.runScript(Ruby.java:822) 
     at org.jruby.Ruby.runScript(Ruby.java:814) 
     at org.jruby.Ruby.runNormally(Ruby.java:752) 
     at org.jruby.Ruby.runFromMain(Ruby.java:574) 
     at org.jruby.Main.doRunFromMain(Main.java:409) 
     at org.jruby.Main.internalRun(Main.java:304) 
     at org.jruby.Main.run(Main.java:231) 
     at org.jruby.Main.main(Main.java:200) 

有人可以告訴我我做錯了什麼嗎?

ps:teste_jruby.jar是我用java代碼導出的jar文件。

謝謝, 卡洛斯。

回答

相關問題