在Ruby中导入.jar文件:如何使用该类

时间:2015-09-06 12:12:25

标签: java ruby jar import jruby

以下是我的jruby文件test.rb

require 'java'
require 'jruby.jar'

java_import 'jruby.Jruby'

puts "This is coming from Ruby."

这是我的Java代码:

package jruby;
import javax.swing.JOptionPane;
public class Jruby {
    public static void main(String[] args) {
        String s = "This is coming from Java!";
        JOptionPane.showMessageDialog(null, s);
    }   
}

当我使用命令

运行jruby时
jruby test.rb

我得到的唯一结果是

this is coming from Ruby.

如何从Java类启动以获取Jar文件中的代码?当我尝试添加以下内容时:

var = new Jruby()

它给了我一个错误:

NoMethodError: undefined method `Jruby' for main:Object

修改

试过这个,也没有用。包名称为foo,类名为Foo

    require 'java'
    require 'foo.jar'

    java_import 'foo.Foo'
    puts "This is coming from Ruby."
    foo.Foo.main()

这给出了以下错误:

NameError: undefined local variable or method 'foo' for main:Object (root) at test.rb

与Meier'帮助合作的最终文件

require 'java'
require 'foo.jar'

java_import 'javax.swing.JOptionPane'
puts "This is coming from Ruby."

import 'foo.Foo'
Java::foo::Foo.hello()

hello()是包含Java代码的类。

1 个答案:

答案 0 :(得分:4)

在jruby中,您可以按包名和类名访问java类。 见https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

您的java main方法是静态的,因此不需要new。所以这应该有用。

jruby.Jruby.main()

但我建议重命名你的java类和包。您可能会发生名称冲突,因为jruby内部的某些内容也可能被称为jruby。 这个名字也错了,因为它是一个java类,而不是一个jruby类。

修改

在查阅文档后,以上内容仅适用于标准java包。有几种方法可以访问java类:

  1. 使用Ruby模块语法:

    爪哇::富:: Foo.main()

  2. 点语法,正如我先尝试的那样。

  3.   

    “第二种方式:对于顶级Java包java,javax,javafx,org,   和com你可以输入一个完全限定的类名,基本上如下所示   Java,例如,java.lang.System或org.abc.def.className ...“

    您需要将您的java类放在包com.foo中,或者编写一个额外的方法来访问该包:

    def edu
      Java::Edu
    end
    
      

    “然后您可以使用常用的Java包名称   edu.abc.def.ClassName“

    1. 在java_import之后,导入的类“将在全局名称空间中可用”

      java_import'foo.Foo'

      Foo.main()

    2. 在所有情况下,您需要确保jruby看到您的jar文件。

        

      “通过需要在$ LOAD_PATH中搜索来加载jar文件   它们就像普通的红宝石文件一样。“