2016-10-12 23 views
1

我正在使用Eclipse編寫我的Java應用程序。Java以編程方式檢測Eclipse /調試器

如果代碼是從Eclipse調試環境(F11)執行,或者代碼在沒有Eclipse的情況下使用「java -jar」執行,那麼是否可以通過編程方式進行檢測?

我知道在Visual Studio中,可以檢測Visual Studio是否執行,但我不是在這裏編寫.Net應用程序,而是在Eclipse下編寫Java。

+3

你想要達到什麼目的? –

+1

也許這將有助於:http://stackoverflow.com/questions/3776204/how-to-find-out-if-debug-mode-is-enabled –

+0

一種選擇是隻使用Java屬性,或者簡單地使用環境變量,然後在運行時在Eclipse中進行設置。這可能比試圖檢測特定的開發環境要好得多,並且即使在Eclipse下也能正常運行應用程序而無需修改代碼。 – hyde

回答

2

在過去,我通過檢查是否可以找到.project文件,使用了一些黑客來查看我的軟件是否在Eclipse中運行。

public static boolean isRunningInEclipse(int folderDepth) { 
    File projectRoot = new File(Boot.class.getProtectionDomain().getCodeSource().getLocation().getFile());  
    for (int i = 0; i < folderDepth; i++) { 
     projectRoot = projectRoot.getParentFile(); 
     if (projectRoot == null || !projectRoot.isDirectory()) { 
      return false; 
     } 
    } 
    return new File(projectRoot, ".project").isFile(); 
} 

如果在位於bin文件夾中主類與您通話folderDepth = 1的方法,如果你的主類位於target/classes/你folderDepth叫它= 2

如果你特別希望要知道它是否在調試器中運行,我建議你檢查this answer

+0

尼斯破解。請注意,您可能需要做更多的檢查來覆蓋「bin」與「target/classes」vs「WEB-INF/classes」中的類文件,但這個想法是相同的。 – AngerClown

+0

@AngerClown Thx恭維!你是對的,我的代碼示例假定類在目標/類/文件夾中。我會把這個添加到我的答案中。 – THelper

+1

'false =='應該是'!'。但是「存在」測試已經過時,最後的「isFile」測試意味着它的父代存在。此外,'.toString()'已經過時。所以整個測試可以融合到'return oFile!= null && new File(oFile,「.project」)。isFile();' – Holger

相關問題