我有两节课:
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
,main
调用App.umain
。我将以编程方式从Java或JNI获取主类名App
,以便从JNI代码中调用App.umain
。你有没有办法做到这一点?
成语new Object(){}.getClass().getEnclosingClass()
因UThreadApp
返回{{1}}而失效。
答案 0 :(得分:1)
静态方法没有类,也没有this
引用。您的App
课程将“继承”主要课程,因为该课程通常也可以调用为App.main
。但是you cannot override static methods在常识中。一旦调用了该方法,就无法确定用于调用它的名称。因此,在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);
}
}