主类的名字有没有办法找到用来启动当前JVM的主类的名称,从在JVM上运行任意代码?由于任意,我的意思是代码不一定在主线程中运行,或者可能在main被调用之前在主线程中运行(例如,用户提供的java.system.classloader中的代码,它在main之前运行,因为它用于加载main) - 因此检查调用堆栈是不可能的。移植的方式找到Java代码
2
A
回答
8
这是最接近我可以,你可以把它从这儿过得也不能保证它是真正便携的,如果任何方法调用的另一种主要方法是行不通class.Let我知道如果你发现更干净的解决方案
import java.util.Map.Entry;
public class TestMain {
/**
* @param args
* @throws ClassNotFoundException
*/
public static void main(String[] args) throws ClassNotFoundException {
System.out.println(findMainClass());
}
public static String findMainClass() throws ClassNotFoundException{
for (Entry<Thread, StackTraceElement[]> entry : Thread.getAllStackTraces().entrySet()) {
Thread thread = entry.getKey();
if (thread.getThreadGroup() != null && thread.getThreadGroup().getName().equals("main")) {
for (StackTraceElement stackTraceElement : entry.getValue()) {
if (stackTraceElement.getMethodName().equals("main")) {
try {
Class<?> c = Class.forName(stackTraceElement.getClassName());
Class[] argTypes = new Class[] { String[].class };
//This will throw NoSuchMethodException in case of fake main methods
c.getDeclaredMethod("main", argTypes);
return stackTraceElement.getClassName();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
}
}
}
return null;
}
}
相关问题
- 1. 移植Java代码到Python
- 2. 移植Java代码的JavaScript
- 3. 移植的C++代码到Java
- 4. 将Java SE代码移植到黑莓
- 5. 将java代码移植到contiki-os
- 6. 将Java代码移植到Android
- 7. C#加密代码移植到Java
- 8. 移植PyTorch代码到GPU
- 9. 将PHP代码移植到Delphi代码
- 10. 未找到资源(?),而移植的C++ .NET代码MSVS2005到MSVS2010
- 11. 将旧的cuda代码移植到7.5
- 12. 帮助移植的C++到PHP代码
- 13. 使移植的代码
- 14. 移植旧的MDX代码
- 15. 移植片的代码
- 16. 移植到Objective-C的Java代码非常慢
- 17. 将Common Lisp代码移植到Clojure
- 18. 将源代码从git移植到TFVC
- 19. 代码从32位移植到64位
- 20. 将java6 swing代码移植到java5
- 21. Sigaction并将Linux代码移植到Windows
- 22. 移植win32代码(windows.h)到linux
- 23. 将代码从Linux移植到Windows
- 24. 将AWT图形代码移植到Android
- 25. 将POSIX C代码移植到windows中
- 26. 从.net代码从windows移植到linux
- 27. 移植一个MATLAB代码到Python
- 28. 将代码从Linux移植到MinGW
- 29. 从Bokeh 0.10.0移植代码到0.11.0
- 30. 将g ++代码移植到Clang ++问题
在JVM上,首先调用主类的主要方法。 (也http://java.sun.com/docs/books/jls/third_edition/html/execution.html#12.1见)那么,你是什么意思“可以在主线程中运行的主要甚至被称为前” 。我认为这个短语提到“静态初始化程序”或“线程#运行()”。 – cocoatomo
@cocoatomo:我错过了一些东西。该链接是否显示解决原始海报问题的解决方案?如果是这样,虽然我回顾了一下,但我错过了它。 –
@Hovercraft全鳗鱼:对不起,我错把推回车键我已经完成了我的意见了。我想了解BeeOnRope的意图,所以我要确保的条件BeeOnRope希望见面。 – cocoatomo