主類的名字有沒有辦法找到用來啓動當前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