在 Ruby 中导入 .jar 文件:如何使用 class
Importing .jar file in Ruby: how to use the class
下面是我的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 class 启动来执行Jar 文件中的代码?当我尝试添加以下内容时:
var = new Jruby()
它给我一个错误:
NoMethodError: undefined method `Jruby' for main:Object
编辑
试过了,还是不行。包名称是 foo
,class 名称是 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 代码的 class。
在jruby中,可以通过包名和class名称访问javaclasses。
参见 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
您的 java 主要方法是静态的,因此不需要 new
。所以这应该有效。
jruby.Jruby.main()
但我建议重命名您的 java class 和包。您可能会遇到名称冲突,因为 jruby 中的某些东西可能也被称为 jruby
。
另外这个名字是错误的,因为它是 java class 而不是 jruby class.
编辑:
查阅文档后,以上仅适用于标准 java 包。有几种方法可以访问 java class:
使用Ruby 模块语法:
Java::Foo::Foo.main()
我第一次尝试的点语法。
"Second way: for the top-level Java packages java, javax, javafx, org,
and com you can type in a fully qualified class name basically as in
Java, for example, java.lang.System or org.abc.def.className ..."
您要么需要将您的 java class 放入包 com.foo
中,要么编写一个额外的方法来访问该包:
def edu
Java::Edu
end
"And then you can use use usual Java package names like
edu.abc.def.ClassName"
在java_import之后,导入Class"will be available in the global name space"
java_import 'foo.Foo'
Foo.main()
在所有情况下,您都需要确保 jruby 可以看到您的 jar 文件。
" loading jar-files via require searches along the $LOAD_PATH for
them, like it would for normal ruby files."
下面是我的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 class 启动来执行Jar 文件中的代码?当我尝试添加以下内容时:
var = new Jruby()
它给我一个错误:
NoMethodError: undefined method `Jruby' for main:Object
编辑
试过了,还是不行。包名称是 foo
,class 名称是 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 代码的 class。
在jruby中,可以通过包名和class名称访问javaclasses。 参见 https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby
您的 java 主要方法是静态的,因此不需要 new
。所以这应该有效。
jruby.Jruby.main()
但我建议重命名您的 java class 和包。您可能会遇到名称冲突,因为 jruby 中的某些东西可能也被称为 jruby
。
另外这个名字是错误的,因为它是 java class 而不是 jruby class.
编辑:
查阅文档后,以上仅适用于标准 java 包。有几种方法可以访问 java class:
使用Ruby 模块语法:
Java::Foo::Foo.main()
我第一次尝试的点语法。
"Second way: for the top-level Java packages java, javax, javafx, org, and com you can type in a fully qualified class name basically as in Java, for example, java.lang.System or org.abc.def.className ..."
您要么需要将您的 java class 放入包 com.foo
中,要么编写一个额外的方法来访问该包:
def edu
Java::Edu
end
"And then you can use use usual Java package names like edu.abc.def.ClassName"
在java_import之后,导入Class"will be available in the global name space"
java_import 'foo.Foo'
Foo.main()
在所有情况下,您都需要确保 jruby 可以看到您的 jar 文件。
" loading jar-files via require searches along the $LOAD_PATH for them, like it would for normal ruby files."