我使用Java语言正在设计和实现一个JVM,但在运行阶段遇到了两个问题,希望能得到大家的指点。1. 怎么样调用Java API中的类的本地方法?例如Object类。我将Object.class文件中的内容装载之后,就要进行初始化。这个类的初始化方法<clinit>只有两条指令:
invokestatic 71
return
其中第一条指令实际上是调用一个Object类中的私有的本地方法registerNatives。我应该怎么样做才能调用这个方法呢?还是我必须自己去实现这个方法?2. 怎么样进行Java级的多线程管理?作为一个JVM,是怎么样知道Java源程序新建了一条线程?怎么样知道线程改变了它的状态?怎么样知道线程间发生了切换?怎么样知道线程已经死亡?

解决方案 »

  1.   

    1、首先用static {
    System.loadLibrary( "Jni_Name" ) ;

    加载jni.然后再调用native方法 public native void method()
    2、建议去看一看java线程第二版.
      

  2.   

    加载jni.然后再调用native方法 public native void method()------------------------------------------------------------
    问题就是invokestatic 71指令调用的本地方法是registerNatives,该方法是私有的:public class Object {    private static native void registerNatives
    ……
    }怎么样调用这种私有本地方法呢???
      

  3.   

    静态私有本地方法就是让你直接调用,不用访问类去重写,公共的本地方法就是要去重写的。私有方法直接调用! Object.registerNatives()
      

  4.   

    那么那些公共的本地方法我要必须实现才能调用的吗?而不能直接使用API库中的公共本地方法?例如 
    public class Object {    private static native void registerNatives();    public native int hashCode();
    ……
    }有这样的语句会不会有问题:
    Object obj = new Object();
    obj.hashCode();
      

  5.   

    另外,在JB中试验后发现问题:Object.registerNatives();Errors:
    "JVVM.java": registerNatives() has private access in java.lang.Object at line 34, column 12
      

  6.   

    那样调用肯定有问题啊!
    你在object类中写一个公共方法!然后再调用
    public class Object {    private static native void registerNatives();    public native int hashCode();
        ……
        public void register() {
           registerNatives();
        
        }
    }
      

  7.   

    那是我需要修改API类库的内容???能不能不修改API类库的内容,用其它方法实现?我猜想这些本地方法应该早已经被sun公司实现,并且打包于某个DLL文件或者其它文件,我就是不知道是哪一个文件
      

  8.   

    你自己是JVM,怎么不能调用私有的方法呢
      

  9.   

    你自己是JVM,怎么不能调用私有的方法呢
    -------------------------------------我是想使用Java语言实现一个JVM,但目前就是不知道怎么样调用私有的本地方法。
      

  10.   

    我是想使用Java语言实现一个JVM,但目前就是不知道怎么样调用私有的本地方法,尤其是指在Java API类库中的私有的本地方法。