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

Java 在Ruby中导入.jar文件:如何使用该类,java,ruby,jar,import,jruby,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) {

下面是我的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代码的类。

在jruby中,您可以通过包名和类名访问Java类。 看

java主方法是静态的,因此不需要
new
。所以这应该行得通

jruby.Jruby.main()
但是我建议重命名java类和包。您可能会遇到名称冲突,因为jruby中的某些内容可能也被称为
jruby
。 而且名称是错误的,因为它是一个java类而不是jruby类

编辑:

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

  • 使用Ruby模块语法:

    Java::Foo::Foo.main()

  • 点语法,正如我第一次尝试的那样

  • “第二种方式:对于顶级Java包Java、javax、javafx、org, 您可以键入完全限定的类名,基本上如中所示 Java,例如,Java.lang.System或org.abc.def.className…”

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

    def edu
      Java::Edu
    end
    
    然后您可以使用常见的Java包名称,如 edu.abc.def.ClassName“

  • java_导入后,导入的类“将在全局名称空间中可用”

    java_导入“foo.foo”

    Foo.main()

  • 在所有情况下,您都需要确保jruby能够看到您的jar文件

    “通过加载jar文件需要沿$LOAD_路径搜索 它们就像普通ruby文件一样。”


    您需要确保不在ruby文件中编写java语法,比如新的Jruby()这给了我一个错误NameError:main:对象的未定义局部变量或方法“jruby”。我会按照你的建议改名字,但我不认为这是问题的原因。你怎么认为?谢谢。在用一个新名称创建了一个新类之后,我仍然得到了相同的错误。。那么,问题是什么呢?请查看我的新test.rb文件(添加到问题中)