2015-09-06 76 views
1

以下是test.rb在Ruby中導入.jar文件:如何使用類

require 'java' 
require 'jruby.jar' 

java_import 'jruby.Jruby' 

puts "This is coming from Ruby." 

叫我JRuby的文件,這是我的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 

最後文件,該文件與梅耶爾的幫助

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

你需要確保你不寫Java語法在ruby文件,如新的JRuby() – Meier

回答

2

在JRuby中,你可以通過包名和類名訪問Java類。 請參閱https://github.com/jruby/jruby/wiki/CallingJavaFromJRuby

您的java主要方法是靜態的,所以不需要new。所以這應該工作。

jruby.Jruby.main() 

但我建議重命名您的java類和包。您可能會遇到名稱衝突,因爲jruby中的某些內容可能也被稱爲jruby。 也是這個名字是錯的,因爲它是一個java類而不是jruby類。

編輯:

諮詢文件後,以上只是標準的Java包是正確的。有幾種方法來訪問一個Java類:

  1. 使用Ruby的語法模塊:

    的Java ::富:: Foo.main()

  2. 點語法,因爲我第一次嘗試。

"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類在包com.foo或寫一個額外的方法來訪問包:

def edu 
    Java::Edu 
end 

"And then you can use use usual Java package names like edu.abc.def.ClassName"

  • 在java_import之後,導入的類「將在全局名稱空間中可用」

    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."

    +0

    這給我的錯誤「NameError:未定義的局部變量或方法‘的JRuby’主:對象我將繼續並按照您的建議更改名稱,但我不認爲這是造成問題的原因。您怎麼看?謝謝。 –

    +0

    創建一個新名稱後,我仍然有同樣的錯誤。 ,問題是什麼?請看看我的新test.rb文件(添加到問題中) –