最近在学习java源码,看到很多java类在调用底层资源方法都终结在了native方法上,我突然明白了jvm之所以能跨平台是因为jvm.dll提供了native方法的实现,在其他操作系统上相应的jvm文件提供了native方法的实现,所以使用jvm.dll中定义的native函数并不会破坏平台无关性,我便将java src中的native移植到我自己的代码中 private native StackTraceElement getStackTraceElement(int index);
private native int getStackTraceDepth();这两句是从 Throwable 中抄来的,试图也能在我的程序中得到方法的栈调用层次,结果报了找不到动态链接库的异常java.lang.UnsatisfiedLinkError,然后我想这个方法应该是定义在C:\Program Files\Java\jre1.5.0_07\bin\client\jvm.dll 虚拟机种,然后加入。 static{
System.loadLibrary("C:\\Program Files\\Java\\jre1.5.0_07\\bin\\client\\jvm.dll");
}还是不对。
我开始产生疑问了
1、平时我用java lib的时候运行到最底层也是native,但是我也没有配置过库路径啊,怎么就能运行?
2、怎么能在自己的类李运行这些函数?
private native int getStackTraceDepth();这两句是从 Throwable 中抄来的,试图也能在我的程序中得到方法的栈调用层次,结果报了找不到动态链接库的异常java.lang.UnsatisfiedLinkError,然后我想这个方法应该是定义在C:\Program Files\Java\jre1.5.0_07\bin\client\jvm.dll 虚拟机种,然后加入。 static{
System.loadLibrary("C:\\Program Files\\Java\\jre1.5.0_07\\bin\\client\\jvm.dll");
}还是不对。
我开始产生疑问了
1、平时我用java lib的时候运行到最底层也是native,但是我也没有配置过库路径啊,怎么就能运行?
2、怎么能在自己的类李运行这些函数?
解决方案 »
- jar不能运行
- [color=#FF0000]急:将Jlabel分成两段[/color]
- 关于list排序的问题
- 通过java application 中的一个方法,将1-100内随机产生50个数,并打印,再将其中的偶数降序排列,并打印
- 对treeModel,根据节点名称如何查找到一个节点,获得该节点
- 求jdk安装后的jdk文件
- java 如何调用 exe程序 ,要求调用后,自己就退出
- 小爪初探,请教:程序为何编译不过?
- 如果向数据库中添加数据时违反unique规则,java中是否有专门的异常类来捕捉它?
- JB6的XYlayout类放在哪里?
- 怎么对list里的对象按其属性排序?
- 关于java.lang.Runtime().exec()的问题?
如果你有一个dll,需要加载运行,可以这样来做
你的异常时因为函数名“getStackTraceDepth()“在加载的动态库中没有发现。
你用javah会知道其函数名规则,它与定义的private native int “getStackTraceDepth()“有关,
还与自己所属的类有关。
不知道解释清楚了没有