Java jar加载与windows启动问题

Java jar加载与windows启动问题,java,Java,我正在使用以下代码将注册表项添加到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"); } catc

我正在使用以下代码将注册表项添加到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启动时自动启动,但问题是每次启动时都使用默认设置,并且没有加载conf.properties文件,该文件与jar文件位于应用程序文件夹中的同一位置。
为什么会发生这种情况?我可以通过regedit查看应用程序的路径是否正确。有没有办法解决这个问题?

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

Class-Path: \C:\yourPath\ 
如果您的配置文件需要位于JAR外部,并且位于用户定义的目录中,请尝试获取JAR路径,如下所示:

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


我认为,莫雷托是对的

您的Java代码应该找到jar的位置,找到它旁边的.properties文件,然后在这里读取它


GoogleGuavac可以做得更好,就像基本的J2SEAPI一样。例如,您可以将.properties或任何类型的资源嵌入到main.jar中,并从一个简单的API调用中读取它。

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

显示从配置文件加载的应用程序代码。工作目录不是jar目录!那么,我怎样才能得到jar目录呢?但是我不希望路径是固定的。可能是用户将jar目录放在了另一个文件夹或磁盘中。然后您必须将配置文件放在jar中!不能在jar中写入属性文件。你的另一种孤独很好。另一种方法是在设置时仅在首选项中设置安装路径,而不是将该“基本路径”用于配置文件。