0

我有两节课:

public class UThreadApp {
    public static void main(String[] args) {
        newUThread("umain", args);
            ...
    }
    native void newUThread(String method, String[] args);
}

public class App extends UThreadApp {
    public static void umain(String[] args) {
        ...
    }
}

应用程序执行为java App.

App继承main自调用. UThreadApp_ 我必须以编程方式从 Java 或 JNI 获取主类名,以便从 JNI 代码中调用。你有办法做到这一点吗?mainApp.umainAppApp.umain

new Object(){}.getClass().getEnclosingClass()那些自返回后就不起作用的成语UThreadApp

4

1 回答 1

1

静态方法没有类,也没有this引用。App只要 main 通常也是可调用的,您的类将“继承” main App.main。但是你不能覆盖常识中的静态方法。一旦方法被调用,就无法确定调用它的名称是什么。因此,无论在 java 端还是在本机代码中,您所做的任何事情都不会为您提供所需的信息。除了破解 java 可执行文件并找出它的命令行参数或类似的野蛮和不受支持的方法之外,就是这样。

注意:您还有一个错误,即静态main尝试调用非静态newUThread

你可以做的是这样的事情,离开static范围并获得一个合理的this指针:

public class UThreadApp {
    protected void UThreadApp(String[] args) {
        newUThread("umain", args);
            ...
    }
    native void newUThread(String method, String[] args);
}

public class App extends UThreadApp {
    public void main(String[] args) {
        new App(args);
    }
    public App(String[] args) {
        super(args);
    }
}
于 2012-07-20T21:19:50.080 回答