【问题标题】:How do i load a compiled Java class in JRuby?如何在 JRuby 中加载已编译的 Java 类?
【发布时间】:2018-12-05 18:52:10
【问题描述】:

所以,我开始使用 Java,在 JRuby 脚本或另一个 Java 应用程序中加载类时遇到了一些问题。我们以这个文件为例:

package dice;
import java.util.Random;
public class Dice {
    public int sides;
    private Random random;
    public Dice(int sides) {
        this.sides = sides;
        this.random = new Random();
    }
    public Dice() {
        this.sides = 6;
        this.random = new Random();
    }
}

当我在 NetBeans 中编译它时,它会生成一个包含该类文件的 jar 文件和一个 META-INF 文件。我可以在 JRuby 中要求它,但我不能做 java_import 部分:

irb(main):013:0> java.dice.Dice
Traceback (most recent call last):
        7: from C:/jruby-9.2.4.1/bin/jirb:13:in `<main>'
        6: from org/jruby/RubyKernel.java:1181:in `catch'
        5: from org/jruby/RubyKernel.java:1181:in `catch'
        4: from org/jruby/RubyKernel.java:1415:in `loop'
        3: from org/jruby/RubyKernel.java:1043:in `eval'
        2: from (irb):13:in `evaluate'
        1: from org/jruby/javasupport/JavaPackage.java:252:in `method_missing'
NameError (missing class name (`java.dice.Dice'))

【问题讨论】:

    标签: java jruby


    【解决方案1】:

    由于 package 声明,我将 dice 放在 dir dice 中,并对其进行编译。 . └── dice ├── Dice.class └── Dice.java

    运行 IRB $ irb 我们需要将类路径添加到 Jruby 并使用包前缀导入

    jruby-9.2.0.0 :001 > $CLASSPATH << "."
    
    jruby-9.2.0.0 :002 > java_import 'dice.Dice'
     => [Java::Dice::Dice] 
    
    jruby-9.2.0.0 :003 > Dice.new
     => #<Java::Dice::Dice:0x4f9a3314> 
    

    【讨论】:

    • 赞成,但找到了更好的解决方案。顺便说一句,使用 JIRB 来保证 JRuby 提示符。
    【解决方案2】:

    仍然支持,但我自己发现了,我只需要这样做

    Java::dice.Dice
    

    因为它只有在没有Java:: 部分的情况下才可以在包的 java 文件夹中使用,例如

    java.lang.System
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-01-11
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多