2013-11-14 53 views
0

我用下面的代碼添加註冊表項,以HKCU \軟件\微軟\的Windows \ CurrentVersion \ Run中:與Windows啓動問題Java的罐子負載

try { 
      r.exec("reg add HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Run /v SnShut /t REG_SZ /d " + System.getProperty("user.dir")+ "\\SnShutd.jar"); 
     } catch (IOException ex) { 
      Logger.getLogger(ShutdownForm.class.getName()).log(Level.SEVERE, null, ex); 

以上成功創建該條目和應用程序會在Windows啓動時自動啓動,但問題是每次都從默認設置開始,並且不會加載應用程序文件夾中的conf.properties文件與jar文件位於同一位置。 爲什麼會發生這種情況?我可以通過註冊表看到該應用程序的路徑是正確的。有沒有什麼辦法解決這一問題?

+0

向我們展示從配置文件加載的應用程序代碼。 – david99world

+1

工作目錄不是jar目錄! – mauretto

+0

那麼,我怎樣才能得到jar目錄? –

回答

0

將罐子路徑進入MANIFEST.MF如下

Class-Path: \C:\yourPath\ 

如果您的配置文件需要從JAR和用戶定義的目錄外嘗試得到如下的jar路徑:

YourClass.class.getProtectionDomain()。getCodeSource()的getLocation()。的getPath()

+0

但我不希望路徑被修復。也許用戶把jar目錄放在另一個文件夾或磁盤中。 –

+0

比你必須把你的配置文件裏面的罐子! – mauretto

0

我認爲,Mauretto有權。

你的Java代碼應該找出它的jar的位置,找到它旁邊的.properties文件,並在這裏閱讀它。

谷歌Guavac可以做得更好,因爲基礎j2se API。例如,您可以將.properties或任何類型的任何資源嵌入到主.jar中,並從1個簡單的API調用中讀取它。

0

我試圖將config.properties文件保存到類路徑中,但這種方式我無法寫入文件,因此它只加載默認值。我不知道如果我做錯了什麼,或者如果它屬於內部jar目錄下的屬性文件不能被寫入,但我找到了一種不同的方式來解決我的問題。 我用preferenses來代替,我設法存儲/恢復值沒有問題。

Preferences prefs = Preferences.userRoot().node(this.getClass().getName()); 
    //get the preferences 
    String B = this.prefs.get("Hours", "0"); 
    String A = this.prefs.get("Mins", "0"); 
    boolean C = this.prefs.getBoolean("Autostart", false); 

    //save preferences 
    prefs.put("Hours", spHours.getModel().getValue().toString()); 
    prefs.put("Mins", spMinutes.getModel().getValue().toString()); 
    if(cbAutostart.isSelected()==true){ 
     prefs.putBoolean("Autostart", true); 
    }else 
     prefs.putBoolean("Autostart", false); 
+1

你不能在jar中寫屬性文件。你的另一個選擇是好的。另一種方法是在安裝時只在首選項中設置安裝路徑,而不是使用配置文件的「基本路徑」。 – mauretto