我只想在單擊菜單欄中的“幫助”時設置一個 CHM 文件實例,并在再次單擊時阻止它打開兩次 - 因此我該如何編碼?我嘗試將它與 process.isAlive() 一起使用,但在我關閉它之后我希望將計數器設置為零,這只會在計數器為 0 時打開另一個 CHM 文件。helpMenu.addMouseListener(new MouseAdapter() {// do this after clickedopenCHM();});所以 MouseEvent 被觸發一次。openCHM() {Process p;if(cnt == 0) { p = Runtime.getRuntime().exec("hh.exe Help.chm"); cnt++; if(!p.isAlive()) { cnt = 0; }}我預計計數器為 0,但后來得出的結論是 MouseEvent 已經觸發一次并且代碼已經執行,因此它永遠不會進入第二個 if 語句并將我的計數器設置為 0。編輯如何一次打開 CHM 文件沒有正確答案,但有一個解決方法可以實現,我們只需要查看文件是否可重命名。protected void openCHM() { try { File file = new File("YOURNAME.chm"); boolean renamable = file.renameTo(file); // can't rename if file is already open, returns true if renaming is possible if(renamable) { Runtime.getRuntime().exec("hh.exe YOURNAME.chm"); } else if(!file.exists() ){ // message: file doesn't exist (in path) } else { // file is already open } } catch () { } }
1 回答

元芳怎么了
TA貢獻1798條經驗 獲得超7個贊
我不是 Java 程序員,但短篇小說 - 不可能(AFAIK)。
您知道,hh.exe
是 HTMLHelp 可執行文件并與 *.CHM 文件相關聯。它只是一個使用 HTML 幫助 API 的外殼,實際上只是托管一個瀏覽器窗口。
HH.EXE 不是單例,如果用HH.EXE 打開一個CHM 或其他文件3 次,會出現3 個幫助窗口。使用 PowerShell 試試:
PS?D:\_working>?hh.exe?C:\Windows\Help\htmlhelp.chm
多個客戶端命令行開關可用于幫助作為 HTML 幫助可執行程序 (hh.exe) 一部分的作者,因此在未設置 HTML Help Workshop 時工作。
KeyHH.exe
多年前以特殊參數運行。
如果您直接從您的應用程序調用 HH API,而不是通過第二個幫助程序(如 HH.EXE 或 KEYHH.EXE),那么您必須在關閉應用程序之前關閉所有打開的幫助窗口,否則您可能會使 Windows 崩潰。
添加回答
舉報
0/150
提交
取消