簡體   English   中英

我如何確定哪個類被執行為主類?

[英]How do I figure out which class was executed as the main class?

最終,我想要的是類似於該問題的答案:

查找從何處加載Java類

有一個轉折。 與示例不同,我不知道在編譯時哪個類將包含main方法。 但是,如果我知道首先調用哪個類,則可以找到執行我的應用程序的位置。

所以我的問題是:如何發現哪個類包含執行Java應用程序所調用的主要方法?

編輯(澄清):

我想讓一個圖書館知道我正在運行的應用程序的“名稱”。 因此,如果我輸入java -cp ... MyMainClass,而我的主類恰好位於文件夾/usr/something/myApp/lib/MyMainClass.jar中,那么我可以報告“ myApp”。 這是推斷我程序名稱的后備默認選項。

如果您在程序的主線程中,則可以執行以下操作:

StackTraceElement[] stackTrace = new Exception().getStackTrace();
String className = stackTrace[stackTrace.length - 1].getClassName();

正如@Makoto所說,它可能對解釋為什么需要執行此操作很有用; 可能有更好的方法,具體取決於您啟動應用程序的方式。

要獲取入口點,而不依賴於線程,可以檢索所有堆棧跟蹤,並在id == 1那一個中選擇最高點,例如(Java 8):

StackTraceElement[] stackTrace = Thread.getAllStackTraces()
        .entrySet()
        .stream()
        .filter(entry -> entry.getKey().getId() == 1)
        .findFirst().get()
        .getValue();
System.out.println(stackTrace[stackTrace.length - 1]);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM