如何在编辑时自动更新我的代码?我之前在youtube视频中看过这个功能,但我找不到它。例如:我将JApplet矩形宽度从20更改为10,我希望立即更新它。
答案 0 :(得分:1)
我见过Notch在开发视频(Minecraft)上这样做,它很棒但我不确切知道他是怎么做到的。
- 编辑 -
这一直困扰着我,所以我去了google搜索“如何删除代码”,并在博客页面https://gun.io/blog/what-i-learned-from-watching-notch-code/上找到了这个。它并没有确切地说它是如何完成的,而是提供了一个很好的提示(HotSwap)并使它看起来像是在没有外部软件的情况下自己设置它。这是最相关的部分:
难以置信的快速测试 他首先构建了引擎,为此,他使用了Java JVM 1.4.2的“HotSwap”功能,该功能在检测到类已更改时不断更新正在运行的代码。 在构建引擎时,Notch编写了一个功能,可以连续平移相机并夹住墙壁并将视图保持在顶部,这样他就可以对代码进行更改并实时查看它们所产生的效果。我习惯于通过编写函数,构建函数,将其安装在我正在测试的设备上进行测试,然后查看结果,这可能一次只需要一分钟,因此很容易看出HotSwapping如何节省了大量的开发时间。
---原帖后续---
我通过使用groovysh得到了类似的效果,工作顺利,可以按原样使用所有java类。
我通常要做的是在java中编写我的所有代码,然后启动“Groovysh”,它会给你一个小窗口来输入命令(你可能必须确保类路径在eclipse之外正常工作) 。然后我可以“新”我的任何类,并一次一行地调用它们的方法。当你执行myFrame.setSize([100,100])时,你会看到它立即改变。
一个好的测试就是运行groovysh并输入类似的内容:
import javax.swing.*
f=new JFrame()
f.setVisible(true)
f.setSize(100,100)
或groovier版本:
f=new JFrame(visible:true, size:[100,100])
您将在屏幕上看到您的框架调整大小。您甚至可以将其拖得更大,然后执行以下操作:
println f.getWidth()
显示您的新宽度。以这种方式进行交互很有趣但是如果你想真正改变你的类定义并看到它接受改变那么它会更复杂,我不知道Notch是如何做到这一点的。我调查了一下 - 他可能正在使用像JRebel这样的东西
它需要一些特殊的东西,因为你必须在每次保存时动态地将类文件重新加载到正在运行的系统中 - 这应该会导致严重的类加载器问题。
顺便提一下,还有一种方法可以让你的Java程序抛出一点GroovyConsole,它允许你检查和修改运行代码中的所有变量(但你不能替换现有类的定义)
另见这里的答案: Change a method at runtime via a hot swap mechanism