明確需求
今天你編了一個java swing版照片查看器,想讓計算機上的所有照片默認打開方式都改成你的照片查看器.
使用工具軟件
很多工具軟件都是不把jre打包到exe中的,這就是說打包之后的exe只能運行在裝了jre的機器上.這一點我是很滿足的,有的人就想把jre打包到exe里面從而到處運行.推薦兩款jar2exe工具:
- exe4j:生成的是一個文件夾,jre會被導出到文件夾中,文件夾中包含一個exe.
- jsmooth,我覺得這個比較好,可以生成一個獨立的exe
當你編的java程序有所改動之后,都需要重新生成exe,十分麻煩.不如下面批處理方法運行java程序靈活.
常用的幾個java命令
- java.exe:在控制台下運行,是阻塞的.即你在控制台下輸入
java -jar haha.jar,知道haha.jar運行結束之后,你才能回到控制台下繼續使用控制台. - javaw.exe:它是非阻塞的,當你編一個腳本
javaw -jar haha.jar
echo haha
運行之,會發現haha.jar還沒運行完就已經開始執行echo haha了
使用windows批處理
如果你不想折騰,不想安裝軟件.那么必然是通過cmd或者exe來運行javaw -jar haha.jar來啟動你的應用.
使用cmd時,要注意把各個命令的回顯關閉.echo off命令關閉全部回顯,echo on打開會先,@mycmd命令表示執行mycmd這個命令時不顯示回顯.
在批處理中傳參數使用方法如下:
- %0,%1,%2...表示第幾個參數
- %0表示命令本身,%1表示第一個參數,這跟c語言中
main(int argcnt,char**args)是一樣的 - %*表示全部命令參數
- %cd%表示當前工作區路徑
經過上面步驟還是會看見黑色控制台的,解決方案是使用start命令.它的作用是啟動一個單獨的窗口以運行指定的程序或命令。
@start javaw haha.jar %*
在調用javaw haha.jar時,會報錯找不到haha.jar,解決方案一使用絕對路徑(可移植性差),解決方案二就是獲取當前運行腳本的路徑
- %~0或者%0: 取文件名(名+擴展名)
- %~f0:取全路徑
- %~d0:取驅動器名
- %~p0:只取路徑(不包驅動器)
- %~n0:只取文件名
- %~x0:只取文件擴展名
- %~s0:取縮寫全路徑名
- %~a0:取文件屬性
- %~t0:取文件創建時間
- %~z0:取文件大小
以上選項可以組合起來使用,如%~nx0相當於%0,%dpnx0相當於%f0.
使用exe運行javaw命令,可以編一段c++代碼
#include<stdio.h>
#include<stdlib.h>
using namespace std;
int main(int cnt,char**args){
system("java -jar haha.jar ");
return 0;
}
windows批處理中的注釋
windows批處理的注釋方式有好多種
- rem方式,可以進行單行注釋,在行末寫^表示本行沒有結束,相當於python中的''
rem 這是第一行注釋^
這是第二行注釋^
每一行的結尾都加上轉義字符就可以把多行當做1行來看,所以就不用每行都寫rem
pause
- goto+標號方式
goto :main
這里可以寫一些關於文檔的說明
如作者、編寫日期等信息
這些信息寫完后,添加主標簽就可以,運行時,會直接跳到main標簽開始運行
:main
echo hello world
總結
批處理文件方式最好.最終結果
set x=%~dp0%haha.jar
start javaw -jar %x% %*
