如何启用Intellij热门代码交换

时间:2011-06-19 11:45:48

标签: intellij-idea hotswap

Intellij似乎没有在我的安装上进行基本的热代码交换。

对于此代码:

public class MainTest {
    public void method1() {
        System.out.println("Breakpoint here");
    }

    public void method2() {
        System.out.println("Line that will get 24 modified");
    }

    public static void main(String[] args) {
        System.out.println("First print here");
        MainTest mainTest = new MainTest();
        mainTest.method1();
        mainTest.method2();
        System.out.println("Line that I do not modify");
    }
}

我在mainTest.method1();上放了一个断点,然后在method2()处修改字符串,点击ctrl + s并继续一步一步。遗憾的是,运行时未更新,正在打印旧字符串。完全停止 - 编译 - 运行会打印新字符串。所以我的结论是热插拔不​​起作用。

我是否需要设置任何设置才能启用热码交换?

  • Ubuntu,JDK 1.6
  • Intellij 10.5 Ultimate(评估)

8 个答案:

答案 0 :(得分:72)

在等待断点时保存课程后,只需使用Build -> Compile 'MainTest.java'重新编译课程,或者使用标准键绑定按Ctrl+Shift+F9

IntelliJ IDEA将显示一个小对话框,询问您是否要重新加载该类。

答案 1 :(得分:10)

经过以下修改并启用热插拔后,Java文件中的更改需要1-2秒的重启时间。 (对我来说,初始开始时间约为7秒)。

我希望以下方法有帮助...

首先,您需要在首选项菜单中选中“自动生成项目”。

打开首选项菜单;

您可以转到顶部菜单并点击;

  

IntelliJ IDEA - >首

或者您可以通过键盘输入以下快捷方式;

  

cmd +选项+ s

然后,您可以查看 /** * sort keys like in key list * filter: remove keys are not listed in keyList * ['c'=>'red', 'd'=>'2016-12-29'] = sortAndFilterKeys(['d'=>'2016-12-29', 'c'=>'red', 'a'=>3 ]], ['c', 'd', 'z']){ * * @param array $inputArray * @param string[]|int[] $keyList * @param bool $removeUnknownKeys * @return array */ static public function sortAndFilterKeys($inputArray, $keyList, $removeUnknownKeys=true){ $keysAsKeys = array_flip($keyList); $result = array_replace($keysAsKeys, $inputArray); // result = sorted keys + values from input + $result = array_intersect_key($result, $inputArray); // remove keys are not existing in inputArray if( $removeUnknownKeys ){ $result = array_intersect_key($result, $keysAsKeys); // remove keys are not existing in keyList } return $result; } ,如下图所示;

enter image description here

其次,您需要将Make project automatically注册表设置修改为true。

要打开注册表,您需要单击下面的键盘快捷键:

  

cmd + shift + a

如下图所示输入compiler.automake.allow.when.app.running,选择registry,然后按键盘输入按钮;

enter image description here

Registry窗口打开后,输入Registry以查看compiler.automake选项,并在下方图片中进行检查;

enter image description here

然后,您需要重新启动IntelliJ才能使注册表更改正常工作。

答案 2 :(得分:5)

intellij 11中有一个Debugger > HotSwap选项。

答案 3 :(得分:2)

转到设置 - >选择Debug - > HotSwap

enter image description here

答案 4 :(得分:2)

对于遇到与我相同的问题的任何人,您可能会遇到以下近期错误影响2020.2更新https://youtrack.jetbrains.com/issue/IDEA-247530?_ga=2.116305920.729836936.1599654650-984156210.1599654650

TL; DR 作为一种解决方法,您需要重新激活Groovy插件。

答案 5 :(得分:1)

我希望hotswap在每次保存Java文件时自动运行。其他答案都没有这样做,所以我只是:

  1. 创建了一个将在保存时运行的宏:https://stackoverflow.com/a/5581992/14731
  2. 在宏(Action: Hotswap)的末尾添加了Run -> Reload Changed Classes

答案 6 :(得分:0)

我在Ubuntu上遇到过这个问题。我还有一个明显不相关的问题,其中IntelliJ给出了关于文件监视限制的错误(我道歉,我不再有确切的错误消息)。为了解决这个问题,我做了以下步骤:

  1. 将以下行添加到/etc/sysctl.conf文件或idea.conf目录下的新* .conf文件(例如/etc/sysctl.d/):

    fs.inotify.max_user_watches = 524288
    
  2. 然后运行此命令以应用更改:

    sudo sysctl -p --system

  3. 现在我的React组件重建和热插拔就好了。

    Source

答案 7 :(得分:0)

我想你是在问这个,

  1. 右键单击您的Java类
  2. 选择编译并重新加载文件