看了樓上的發(fā)言,你有資格說別人傻嗎?看清楚樓主的問題好不好!樓主的意思是直接在java程序中配置實現(xiàn),而不是像你那么傻的手動去實現(xiàn)!

成都創(chuàng)新互聯(lián)主要從事成都網(wǎng)站制作、做網(wǎng)站、外貿(mào)營銷網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)曲周,10年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):028-86922220
轉(zhuǎn)載兩篇文章,結(jié)合起來可以實現(xiàn)java應(yīng)用程序開機自動啟動
可能也有別的好方法,這只是其中的一種
思路就是將java應(yīng)用程序打包成.jar文件,然后轉(zhuǎn)成.exe,通過修改注冊表來增加刪除啟動項,即將安裝后的.exe執(zhí)行文件添加到注冊表中;
首先將java應(yīng)用程序打包成.jar文件,可以利用如下代碼找到.jar文件的絕對路徑,即也可以找到安裝后的.exe執(zhí)行文件
轉(zhuǎn)載:
對于Java程序,無論是未打包的還是打包的JAR或WAR文件,有時候都需要獲取它運行所在目錄信息,如何做到這一點呢?
在Java處理的文件系統(tǒng)中,目錄的表示方式有兩種:
(1)絕對目錄,它以"/"為起始字符,代表從根目錄下開始尋找給出的目錄,如/c:/java
(2)相對路徑,它以不帶“/”的目錄名表示,表示以當前Java程序正在運行的目錄作為起始目錄來尋找給出的目錄。如java/classes。在相對路徑中,有一些特定的字符,可以代表特的的目錄,比如,“.”代表當前目錄,“..”代表當前目錄的上一級目錄。在網(wǎng)上很多給出的例子中,就是利用"."作為目錄名,構(gòu)造File對象的實例,然后通過File對象的方法來獲取當前程序運行的目錄。
這種方法雖然簡單,但有時不能正確的得出當前程序的運行目錄。原因在于,運行Java程序不一定要進入到該程序的類文件或JAR文件所在的目錄,只要在運行時指定了正確的類路徑信息,就可以在任何目錄中運行Java程序,此時利用這種方法只能得到發(fā)出運行命令時所在的目錄信息。
從上面的分析可以看出,對于很多Java程序,尤其是WEB程序,利用當前路徑的“.”表示法,都不能滿足要求。那么怎樣才能正確的得到運行目錄信息呢?
在Web程序中,利用Servlet API可以獲得一些路徑信息,比如HttpServletRequest接口中定義的getRealPath方法,但類似這些方法都依賴于Servlet環(huán)境,不便于程序的單元測試。
本文提供了一種只使用Java標準API的路徑探測方法,就是利用ClassLoader抽象類。
利用java.lang.Class的getClassLoader方法,可以獲得給定類的ClassLoader實例,它的getResource方法可以獲得當前類裝載器中的資源的位置,我們可以利用類文件的名稱作為要查找的資源,經(jīng)過處理后就可獲得當前Java程序的運行位置信息,其偽代碼如下:
獲得Class參數(shù)的所在的類名
取得該類所在的包名
將包名轉(zhuǎn)換為路徑
利用getResource得到當前的類文件所在URL
利用URL解析出當前Java程序所在的路徑
具體代碼如下:
java代碼:
Java代碼
/**-----------------------------------------------------------------------
*getAppPath需要一個當前程序使用的Java類的class屬性參數(shù),它可以返回打包過的
*Java可執(zhí)行文件(jar,war)所處的系統(tǒng)目錄名或非打包Java程序所處的目錄
*@param cls為Class類型
*@return 返回值為該類所在的Java程序運行的目錄
-------------------------------------------------------------------------*/
public static String getAppPath(Class cls){
//檢查用戶傳入的參數(shù)是否為空
if(cls==null)
throw new java.lang.IllegalArgumentException("參數(shù)不能為空!");
ClassLoader loader=cls.getClassLoader();
//獲得類的全名,包括包名
String clsName=cls.getName()+".class";
//獲得傳入?yún)?shù)所在的包
Package pack=cls.getPackage();
String path="";
//如果不是匿名包,將包名轉(zhuǎn)化為路徑
if(pack!=null){
String packName=pack.getName();
//此處簡單判定是否是Java基礎(chǔ)類庫,防止用戶傳入JDK內(nèi)置的類庫
if(packName.startsWith("java.")||packName.startsWith("javax."))
throw new java.lang.IllegalArgumentException("不要傳送系統(tǒng)類!");
//在類的名稱中,去掉包名的部分,獲得類的文件名
clsName=clsName.substring(packName.length()+1);
//判定包名是否是簡單包名,如果是,則直接將包名轉(zhuǎn)換為路徑,
if(packName.indexOf(".")0) path=packName+"/";
else{//否則按照包名的組成部分,將包名轉(zhuǎn)換為路徑
int start=0,end=0;
end=packName.indexOf(".");
while(end!=-1){
path=path+packName.substring(start,end)+"/";
start=end+1;
end=packName.indexOf(".",start);
}
path=path+packName.substring(start)+"/";
}
}
//調(diào)用ClassLoader的getResource方法,傳入包含路徑信息的類文件名
java.net.URL url =loader.getResource(path+clsName);
//從URL對象中獲取路徑信息
String realPath=url.getPath();
//去掉路徑信息中的協(xié)議名"file:"
int pos=realPath.indexOf("file:");
if(pos-1) realPath=realPath.substring(pos+5);
//去掉路徑信息最后包含類文件信息的部分,得到類所在的路徑
pos=realPath.indexOf(path+clsName);
realPath=realPath.substring(0,pos-1);
//如果類文件被打包到JAR等文件中時,去掉對應(yīng)的JAR等打包文件名
if(realPath.endsWith("!"))
realPath=realPath.substring(0,realPath.lastIndexOf("/"));
/*------------------------------------------------------------
ClassLoader的getResource方法使用了utf-8對路徑信息進行了編碼,當路徑
中存在中文和空格時,他會對這些字符進行轉(zhuǎn)換,這樣,得到的往往不是我們想要
的真實路徑,在此,調(diào)用了URLDecoder的decode方法進行解碼,以便得到原始的
中文及空格路徑
-------------------------------------------------------------*/
try{
realPath=java.net.URLDecoder.decode(realPath,"utf-8");
}catch(Exception e){throw new RuntimeException(e);}
return realPath;
}//getAppPath定義結(jié)束
//-----------------------------------------------------------------
該方法既可以用于JAR或WAR文件,也可以用于非JAR文件。但要注意以下2點:
不要傳遞系統(tǒng)的類,作為getAppPath的參數(shù),如java.lang.String.class,當然,也不要傳遞那些已經(jīng)位于JDK中的那些類,比如xml相關(guān)的一些類等等。
要傳遞應(yīng)該是程序中主要的運行類,不要傳遞程序中的支持類庫中的類文件,也就是那些第三方的類庫中的類文件,否則得到的將是那些類庫的位置。
然后可以通過修改注冊表來增加開機啟動項:
轉(zhuǎn)載:
需要修改的注冊表項
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run] 開機自動運行程序
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunOnce] 開機自動運行程序 且 僅運行一次
[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\RunServices] 開機自動運行服務(wù)
JDK 從1.4開始提供操作 Windows 的 API 是 Preferences,因為這個 API 也是跨平臺的,所功能比較弱,在 Win32 下只能用來操作 HKCU\Software\JavaSoft 和 HKLM\Software\JavaSoft 下及子節(jié)點的數(shù)據(jù)。
自由訪問注冊表其他鍵的值光用 Java 是做不到的,必然方案就是 JNI,這里我使用的是Windows Registry API Native Interface 下的 registry-3.1.3.zip(包含源代碼)。可以利用它訪問、修改、導出注冊表項到文件等。解開 registry-3.1.3.zip,在 bin 目錄中可以看到兩個文件 ICE_JNIRegistry.dll 和 registry.jar,動態(tài)庫就是本地代碼實現(xiàn)。
com.ice.jni.registry.Registry.main() 就是 registry 的示例代碼,動態(tài)庫 ICE_JNIRegistry.dll 也是在這個類的靜態(tài)塊中被加載的,記得要把 ICE_JNIRegistry.dll 放在它能夠被加載的位置上,比如你把 registry-3.1.3.zip 解壓到 c:\registry-3.1.3,在命令行下你可以進入到這個目錄中,并執(zhí)行。
代碼:
Java代碼
package org.zh.ss.util;
import com.ice.jni.registry.*;
import java.text.SimpleDateFormat;
/** *//**
* java 操作注冊表
* @author 李志遠
*/
public class RegeditTool {
static SimpleDateFormat shortDateFormat = new SimpleDateFormat("yyyy-MM-dd");
/** *//** */
/** *//** Creates a new instance of test */
// 把信息存儲到注冊表HKEY_LOCAL_MACHINE下的某個節(jié)點的某一變量中,有則修改,無則創(chuàng)建
public static boolean setValue(String folder, String subKeyNode,
String subKeyName, String subKeyValue) {
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE
.openSubKey(folder);
RegistryKey subKey = software.createSubKey(subKeyNode, "");
subKey
.setValue(new RegStringValue(subKey, subKeyName,
subKeyValue));
subKey.closeKey();
return true;
} catch (NoSuchKeyException e) {
e.printStackTrace();
} catch (NoSuchValueException e) {
e.printStackTrace();
} catch (RegistryException e) {
e.printStackTrace();
}
return false;
}
// 刪除注冊表中某節(jié)點下的某個變量
public static boolean deleteValue(String folder, String subKeyNode,
String subKeyName) {
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE
.openSubKey(folder);
RegistryKey subKey = software.createSubKey(subKeyNode, "");
subKey.deleteValue(subKeyName);
subKey.closeKey();
return true;
} catch (NoSuchKeyException e) {
System.out.println("NOsuchKey_delete");
} catch (NoSuchValueException e) {
System.out.println("NOsuchValue_delete");
} catch (RegistryException e) {
e.printStackTrace();
}
return false;
}
// 刪除注冊表中某節(jié)點下的某節(jié)點
public static boolean deleteSubKey(String folder, String subKeyNode) {
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE
.openSubKey(folder);
software.deleteSubKey(subKeyNode);
software.closeKey();
return true;
} catch (NoSuchKeyException e) {
e.printStackTrace();
} catch (RegistryException e) {
e.printStackTrace();
}
return false;
}
// 打開注冊表項并讀出相應(yīng)的變量名的值
public static String getValue(String folder, String subKeyNode,
String subKeyName) {
String value = "";
try {
RegistryKey software = Registry.HKEY_LOCAL_MACHINE
.openSubKey(folder);
RegistryKey subKey = software.openSubKey(subKeyNode);
value = subKey.getStringValue(subKeyName);
subKey.closeKey();
} catch (NoSuchKeyException e) {
value = "NoSuchKey";
// e.printStackTrace();
} catch (NoSuchValueException e) {
value = "NoSuchValue";
// e.printStackTrace();
} catch (RegistryException e) {
e.printStackTrace();
}
return value;
}
// 測試
public static void main(String[] args) {
setValue("SOFTWARE", "Microsoft\\Windows\\CurrentVersion\\Run", "test",
"C:\\1.exe");
}
}
這樣,就可以在軟件中添加,刪除,修改開機啟動項了
首先你的電腦上面必須安裝java jdk ,默認安裝就好, jdk分32位和64位,要下和你電腦系統(tǒng)一致的
然后配置java環(huán)境變量,網(wǎng)上有方法,容易找
然后下載eclipse軟件,官網(wǎng)就有,上面兩步完成的話eclipse解壓就能用。eclipse位數(shù)也要和電腦系統(tǒng)一致
在eclipse中新建java代碼,復制代碼進去,然后點擊run運行就行。
上面就是教你如何運行java代碼了
需要用反射才能實現(xiàn)。
先把輸入的代碼字符保存成一個.java文件,用javac.compile 方法把java文件編譯成一個class文件,然后用用反射加載新編譯的類文件,就可以調(diào)用新編譯類中的方法了。
通常在創(chuàng)建java用戶的時候是沒有權(quán)限的,之后必須用root用戶給java用戶賦權(quán)限才可以。
第一步:su root;
第二步:輸入root的密碼;
第三步:執(zhí)行賦權(quán)語句即可:
chmod 777 /home/software/jdk1.7.0_03/java;
備注:chmod是賦權(quán)限命令,777表示賦值所有權(quán)限對本用戶,本組用戶、其他用戶。
名稱欄目:java代碼設(shè)置運行用戶,java用戶管理
轉(zhuǎn)載注明:http://chinadenli.net/article6/dsggiig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)、品牌網(wǎng)站設(shè)計、網(wǎng)站制作、網(wǎng)頁設(shè)計公司、App開發(fā)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)