当前位置: 首页 > 知识库问答 >
问题:

关于在Java中加载库和本机方法的几个问题

段志
2023-03-14

为了理解代码在不同操作系统中运行时挂起的原因,我不得不调试不同的eclipse插件。我在一些Java文件中看到了以下代码:

Library.loadLibrary("swt")

基于Java中的本机方法是什么以及应该在哪里使用它们?,我知道本机方法用于执行用不同编程语言编写的函数。但我有两个问题:

  1. 当使用输入调用loadLibrary时,实际会发生什么情况?loadLibrary在哪里查找SWT库,如何更改它?在Linux中,获取库的等效命令是什么(我想它是一些共享库)
    public static final native void _gtk_widget_destroy(long /*int*/ widget);
    public static final void gtk_widget_destroy(long /*int*/ widget) {
        lock.lock();
        try {
            _gtk_widget_destroy(widget);
        } finally {
            lock.unlock();
        }
   }

gtk\u widget\u destroy方法是本机方法。这是否意味着有另一种语言(可能是C)的方法称为“代码”\u gtk\u widget\u destroy?我如何知道此方法来自哪个库(可能是SWT)?

共有1个答案

上官思博
2023-03-14

System.loadLibrary("X")使用System#mapLibraryName来构造实际的库名称。在Linux这是libX. so,在Mac上是libX. dylib,在Windows上是libX. dll

然后,它在java的每个条目中搜索具有该名称的库。图书馆路径(VM属性)。

对于第二个问题:您还需要周围类的完整名称空间和类名。快速搜索告诉我该方法的全名是org。日食swt。内部的gtk。GTK#\u GTK\u widget\u destroy。现在,有两种选择:

  • 要么<代码>libswt。因此,调用注册表项(RegisterNatives)将此方法绑定到函数指针(通常在其JNI\U OnLoad方法中)事实并非如此
 类似资料:
  • 做作业的时候,算法的实现洪流填满了。我正在为这个指南编写一个程序:http://en.wikipedia.org/wiki/flood_fill。我有一些问题: 指定函数中的参数替换任何字符的颜色是否正常,我不知道这些坐标最初是什么颜色? 算法正确吗?例如,我在维基百科中编写了它,但我的程序的结果如下: 我的代码:

  • 我想将一些常见的阶段移动到groovy文件中,以便其他Jenkinsfile可以使用这些阶段而不必复制它们。 我遇到了一些管道很好地加载groovy文件的问题,但当它使用groovy文件中的函数时,会弹出异常。 这是示例代码,我在jenkins配置中使用管道脚本,而不是在SCM的Jenkinsfile中使用。 和groovy文件。

  • 我目前正在尝试用cubey地形制作一个基本游戏,类似于Minecraft classic。我的第一个问题: 如何在VBO中存储多维数据集列表,然后在更改该数据时重新生成该列表?我当前呈现的立方体如下所示: 我知道我需要使用和来修改VBO,但是如何存储多维数据集并在需要时删除它们?我应该使用ArrayList吗?另外,有人告诉我,我渲染立方体的方式是错误的,因为每个人都说我只渲染一个具有新坐标的立方

  • 问题内容: 我正在尝试编写一个将从用户的串行端口读取的Java小程序。为此,我将Java Comm API 与RXTX库结合使用。我已经成功地通过本地Java应用程序读取了数据,但似乎无法在applet中进行相同的操作。问题在于RXTX库是一个本机库,我还没有找到在Java小程序中加载该库的方法。我发现了两篇有趣的文章(在Applets中使用JNI引用了本文),但是这两篇文章已有10多年的历史了,

  • 我正在通过Node.js1的[node-java]包装器运行一个JNA编译的本机库 这个库是Hunsplaw JNA,它包装了Hunsplaw拼写库。 当试图从lib路径加载本机库时,所发生的情况是节点似乎挂起: 库就在那里,我也尝试了该方法的第二个选项,复制到一个临时文件夹中并从那里加载,这样我就可以看到 它就在那里。

  • 我有以下分布 主要的jar包含main方法,我想在其中访问lib提供的本机函数。所以被捆绑在发行版中。开始sh只需设置java的类路径和引导。 加载库的最佳方法是什么。那么应用程序内部的库呢?我知道两种方法: 系统。加载(绝对路径) 系统。loadLibrary(名称) 前者需要库在文件系统中的绝对路径,后者需要设置特定于应用程序的java。图书馆路径JVM参数。在这种情况下,哪种解决方案更好?将