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

我试图将 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

我认为,毛雷托是对的。

您的 Java 代码应该找出它的 jar 的位置,找到它旁边的 .properties 文件,并在此处阅读它。

作为基础 j2se API,Google Guavac 可以做得更好。例如,您可以将 .properties 或任何类型的任何资源嵌入到主 .jar 中,并从 1 个简单的 API-Call 中读取它。

于 2013-11-14T12:45:01.330 回答
0

将 jar 路径设置为 MANIFEST.MF 如下

Class-Path: \C:\yourPath\ 

如果您的配置文件需要在 JAR 外部并且在用户定义的目录中,请尝试获取 jar 路径,如下所示:

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

于 2013-11-14T12:43:35.297 回答