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

IDE自动完成不知道本机方法的参数名称

强德厚
2023-03-14

我正在从事两个图书馆项目。一个是c中的本机库,另一个是Java库,它使用JNI包装本机库中的函数。所以我总共有3个库:

  • c(项目1)中的本机库
  • c中使用javac(项目2)生成的标头的包装库
  • Java中的包装器库,我用它来生成(项目2)的标头

我的问题只涉及项目2。为了编译项目2,我使用一个一次性运行cmake、javac和jar的脚本来生成一个jar文件。类别和。so文件。对于javac,我使用“-g”参数来生成调试信息。这对于非本机方法(如关键字“native”,而不是c-native)很好,但对于本机方法则不行。已编译。类文件也不包含正确的签名。这是相当令人沮丧的,因为当我在另一个java项目(项目3)中使用我的库时,我不知道根据助手弹出的IntelliJ显示填写什么。我的方法在Java中是这样的,在c中也是这样的。我能修好吗?

另外,您知道这样更改Java方法的签名的术语是什么吗?我尝试了几天来查找我的问题,但都找不到,所以我想知道我是否在Google中使用了错误的搜索短语。

提前感谢!

共有1个答案

马欣德
2023-03-14

参数的名称似乎存储为“局部”变量,而本机方法没有填写该变量。你可以用一种小的“蹦床”方法来解决这个问题:

class Window {
    public long create(int width, int height, String title) {
        return native_create(width, height, title);
    }
    private native long native_create(int width, int height, String title);
}

这将导致以下javap输出:

  public long create(int, int, java.lang.String);
    descriptor: (IILjava/lang/String;)J
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=4, locals=4, args_size=4
         0: aload_0
         1: iload_1
         2: iload_2
         3: aload_3
         4: invokevirtual #7                  // Method native_create:(IILjava/lang/String;)J
         7: lreturn
      LineNumberTable:
        line 4: 0
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0       8     0  this   LWindow;
            0       8     1 width   I
            0       8     2 height   I
            0       8     3 title   Ljava/lang/String;
 类似资料:
  • 问题内容: MyPython IDE(pycharm)已停止自动完成My模块(建议)。我尝试导入的每个django模块之后都会得到未解析的引用,因此: -可以,但是一旦我添加一个“点”,它就会失败,因此给了我未解决的错误… 笨拙的事情是在编译引用后才起作用。 我发现My所有文件(所有地方)不再标记有python图标,现在是记事本图标。同样在My解释器中打开init文件会给出非彩色的标记文本(不突出

  • Eclipse不支持javaScript自动完成和代码高亮,不想使用像codemix这样的付费插件,tabIX有没有其他选择,而不使用其他Ide像Vscode ??

  • 问题内容: 我想检查活动是否正在运行或完成。有什么方法可以检查活动状态? 我找到了,但是我不确定。 问题答案: 如果您想执行任何步骤,将变得不可见。 他们是这里的几种选择。 onDestroy() -进行最终清理。 isFinishing() - 调用后立即返回true。 onStop() -当被框架进程终止时。(未销毁) onPause() -当被其他覆盖 onBackPressed() -捕获

  • 问题内容: 我希望能够自动完成姓名。 例如,如果我们有名字,我希望能够寻找并和获取文档回来。 另外,我不想匹配该文档。 我目前有这个分析仪: 问题在于,首先我们将文本分割开,然后使用edgengrams进行标记化。 结果是: 这意味着,如果我搜索或,则不会返回任何内容。 因此,我需要生成看起来像这样的令牌: 。 如何设置分析仪,以便生成这些额外的令牌? 问题答案: 我最终没有使用edgengram

  • 问题内容: 知道OCAML / CAML IDE吗?特别是在Linux上运行的软件? 问题答案: Emacs处于Caml模式或Tuareg模式或TypeRex模式。TypeRex在emacs中为Taureg添加了自动补全功能- 对于喜欢更多图形化IDE的人来说,这是一个非常不错的功能。

  • 我正在迁移从冰脸selectInputText到Primeface自动完成组件。 我将Primefaces 5.3.5与JSF 2.2.8结合使用。我在Icefaces 1.2中看到的自动完成结果与我的旧版本相同,但我没有看到用户详细信息。我在每行的第一个单元格中只看到数字0。 我不确定我的转换器看起来像什么 公共类AppUserConzer实现转换器{ } 我的自动完成组件的结果 你能告诉我我做