0

次のコードを使用して、レジストリ エントリを HKCU\Software\Microsoft\Windows\CurrentVersion\Run に追加しています。

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 の起動時に自動的に起動しますが、問題は、毎回デフォルト設定で起動し、jar ファイルと同じ場所にあるアプリのフォルダーにある conf.properties ファイルをロードしないことです。 . なぜこれが起こるのですか?アプリのパスが正しいことを regedit で確認できます。これを修正する方法はありますか?

4

3 に答える 3

0

私は、マウレットが正しいと思います。

Java コードは、その jar の場所を見つけ、その横にある .properties ファイルを見つけて、ここで読み取る必要があります。

Google Guavac は、ベースの j2se API として、これをはるかにうまく行うことができます。たとえば、.properties または任意のタイプの任意のリソースをメインの .jar に埋め込み、1 つの単純な API 呼び出しからそれを読み取ることができます。

于 2013-11-14T12:45:01.330 に答える
0

config.properties ファイルをクラスパスに保持しようとしましたが、この方法ではファイルに書き込むことができないため、デフォルト値のみがロードされます。内部jarのディレクトリにある場合、何か間違っているのか、プロパティファイルを書き込めないのかわかりませんが、問題を解決する別の方法を見つけました。代わりにプリファレンスを使用し、値を問題なく保存/復元できました。

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);
于 2013-11-16T11:53:47.220 に答える
0

以下のように、jar パスを MANIFEST.MF に設定します。

Class-Path: \C:\yourPath\ 

構成ファイルが JAR の外部にあり、ユーザー定義のディレクトリにある必要がある場合は、以下のように jar パスを取得してみてください。

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

于 2013-11-14T12:43:35.297 に答える