1

所以我更新到 Eclipse Mars (4.5) 并且由于某种原因我无法在调试器中使用热插拔代码。通常我可以做这样的事情:

public static void main(String[] args){
    while(true){
        System.out.println("123");
    }
}

然后,如果我在调试模式下启动它,将文本更改为“321”,然后保存,然后它会更新而无需重新启动它。它的行为与在“运行”模式而不是“调试”模式下运行完全一样。

我试过的:

  • 创建一个新的工作区,创建一个新的项目,使用上面的代码,没有任何反应
  • 安装了几个 JDK,尝试使用 java 6、7 和 8,更改了工作区和/或项目设置以使用不同的 JDK,没有任何反应(事实上我安装了几个版本的 java 并不重要,因为它是就在我更新 eclipse 它停止工作的那一刻)
  • 尝试卸载删除任何配置文件以 Eclipse(在 Mac 上,这将是 ~/Library 文件夹中带有“eclipse”一词的每个文件/文件夹,运行“查找”搜索以检测所有文件)。然后尝试创建一个新的工作区,现在是项目,代码被剪断,在调试模式下运行,保存时没有任何反应。
  • 还确保我启用了“自动构建”,甚至尝试“清理”它,并禁用自动构建,然后保存代码,然后在调试器运行时进行手动构建:没有任何反应

我开始感到绝望,因为我很难在没有可用调试模式的情况下完成工作,因此任何正确方向的帮助/提示都会非常感激。

4

2 回答 2

1

HotSwap 不适用于静态方法。
但是它适用于实例方法,因此它将适用于以下代码:

public class Main {

    public static void main(String[] args) {
        new Main().f();
    }

    public void f() {
        while(true){
            System.out.println("123");
        }
    }
}
于 2015-09-05T09:51:34.007 回答
1

好的,所以我终于找到了问题所在。似乎您无法在循环运行时对其进行编辑。假设你有一个这样的循环:

public static void main(String[] args){
    while(true){
        System.out.println("123");
    }
}

那么你不能编辑“123”字符串。您可以编辑在循环内调用的方法,如下所示:

public static void main(String[] args){
    while(true){
        System.out.println(methodA());
    }
}

public static String methodA(){
    return "123";
}

现在您可以编辑字符串“123”,它会更新。这也适用于无限的“for”循环,所以猜测经验法则是方法主体必须在更新之前“重新调用”,并且等待下一个循环调用是不够的。

于 2015-09-05T15:20:31.470 回答