以下是我的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代码的类。
答案 0 :(得分:4)
在jruby中,您可以按包名和类名访问java类。 见https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
您的java main方法是静态的,因此不需要new
。所以这应该有用。
jruby.Jruby.main()
但我建议重命名你的java类和包。您可能会发生名称冲突,因为jruby内部的某些内容也可能被称为jruby
。
这个名字也错了,因为它是一个java类,而不是一个jruby类。
修改强>
在查阅文档后,以上内容仅适用于标准java包。有几种方法可以访问java类:
使用Ruby模块语法:
爪哇::富:: Foo.main()
点语法,正如我先尝试的那样。
“第二种方式:对于顶级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“
在java_import之后,导入的类“将在全局名称空间中可用”
java_import'foo.Foo'
Foo.main()
在所有情况下,您需要确保jruby看到您的jar文件。
“通过需要在$ LOAD_PATH中搜索来加载jar文件 它们就像普通的红宝石文件一样。“