Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未调用jruby注释方法_Java_Ruby_Annotations_Jruby - Fatal编程技术网

Java 未调用jruby注释方法

Java 未调用jruby注释方法,java,ruby,annotations,jruby,Java,Ruby,Annotations,Jruby,我有一个名为test.jar的jar,它包含以下java类: Test.java package test; import java.lang.reflect.Method; public class Test { public static void yoyo(Object o) { Method[] methods = o.getClass().getMethods(); for (Method method : methods) { CanRun an

我有一个名为test.jar的jar,它包含以下java类:

Test.java

package test;
import java.lang.reflect.Method;
public class Test {

public static void yoyo(Object o) {

    Method[] methods = o.getClass().getMethods();

    for (Method method : methods) {
        CanRun annos = method.getAnnotation(CanRun.class);
        if (annos != null) {
            try {
                method.invoke(o);            
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
}
package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface CanRun {
} 
和接口CanRun.java

package test;
import java.lang.reflect.Method;
public class Test {

public static void yoyo(Object o) {

    Method[] methods = o.getClass().getMethods();

    for (Method method : methods) {
        CanRun annos = method.getAnnotation(CanRun.class);
        if (annos != null) {
            try {
                method.invoke(o);            
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
}
package test;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(value = ElementType.METHOD)
@Retention(value = RetentionPolicy.RUNTIME)
public @interface CanRun {
} 
我的ruby文件是Main.rb

require 'java'
require 'test.jar'
java_import Java::test.Test

class Main
  def run
    Test.yoyo(Main.new)
  end

  java_annotation('CanRun')
  def onHi()
    puts "inside on Hi"
  end
end

app = Main.new
app.run
我通过以下命令运行它: jrubymain.rb

但没有产出

基本上,我试图做的是,从Main.rb调用Test.java的yoyo(),并在yoyo()中传递Main的对象。然后Test.java中的yoyo()将分析Main.rb的所有函数,这些函数可以运行,如果找到,将调用它们,在我们的例子中,应该调用onHi。 我检查了我在yoyo()中传递的对象是否为空。我面临的问题是onHi没有接到电话

我做了很多尝试,但都没用


我是否在rb文件中正确使用注释,或者请建议其他方法。

您的注释不在默认包中(也不导入),因此:

java\u注释“test.CanRun”


谢谢你的建议,但没有解决问题。因为问题的主要原因是我传递给yoyo()函数的主类对象。在yoyo()函数中,它实际上是org.jruby.RubyObject的对象,而不是主类。在yoyo()函数中尝试获取对象o的declaredMethods(),它们不显示主类的方法。是的,你需要
变成java然后将其传递到Java端。你应该更新帖子,因为你问了一个新的问题,这让人很困惑;(