如何使用 autohotkey 执行单个 .java 文件?

How can I execute single .java file with autohotkey?

我想使用 AutoHotkey.Normally 执行选定的 java 代码 我可以使用以下 cmd 命令执行单个 java 文件:

javac execute.java //compiling and creating execute.class
java execute       //executing .class file

我想用 AutoHotkey.I 编写以下 AutoHotkey 代码

来自动化这个过程
^+e::
sleep 30
Send ^c
sleep 30
FileAppend,Clipboard,"C:\Users\q\Desktop\execute.java"
sleep 30
run cmd.exe,javac execute.java,hide  ; compiling successfully
sleep 2000
results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll() ; can't display executing result
sleep 1000
msgbox % results
return

但我得到以下结果:https://imgur.com/a/PwsxqEBresults。所以我无法正确查看 results := ComObjCreate("WScript.Shell").Exec("cmd.exe java execute").StdOut.ReadAll() 的结果 command.How 我可以解决这个问题吗?

您的脚本存在的问题是:

  1. 你不需要那么多 Sleep
  2. 部分参数格式错误。
  3. 您需要一个循环来读取 WScript.Shell 的输出。
  4. 存在一些工作目录问题。

以下内容已经过测试:

^+e::
Java_CopyCompileAndRun() {
    Static objShell := ComObjCreate("WScript.Shell")   ; Speeds up subsequent runs
    KeyWait Shift   ; Possilby unnecessary
    KeyWait e       ; Possilby unnecessary
    Clipboard := ""
    Send ^c
    ClipWait 1
    FileDelete % "C:\Users\q\Desktop\execute.java"
    FileAppend % Clipboard, % "C:\Users\q\Desktop\execute.java"
    RunWait % A_ComSpec " /c ""javac execute.java""", C:\Users\q\Desktop\, Hide
    objExec := objShell.Exec(A_ComSpec " /c ""cd ""C:\Users\q\Desktop\"" & java execute""")
    While !(objExec.StdOut.AtEndOfStream && objExec.StdErr.AtEndOfStream) {
        sStdOut   .= objExec.StdOut.ReadAll()
        , sStdErr .= objExec.StdErr.ReadAll()
        Sleep 10
    }
    MsgBox % "StdOut :`n" sStdOut "`n`nStdErr :`n" sStdErr
}