2014-12-04 31 views
1

我该如何做到这一点,以便Eclipse在我编辑它时自动更新我的代码?我之前在YouTube视频中看过该功能,但找不到它。例如:我将JApplet矩形的宽度从20更改为10,我希望立即看到它更新。我怎样才能让Eclipse自动更新窗口中的代码?

+1

哪些影片你在看到它,因为据我所知,你将不得不编译和运行应用程序/小程序/任何再次 – 2014-12-04 23:11:34

+2

喜欢的东西[JRebel的] (http://zeroturnaround.com/software/jrebel/jrebelrocks/?utm_medium=sidebar&utm_source=stackoverflow&utm_campaign=pancake)也许? – azurefrog 2014-12-04 23:18:56

回答

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) 

或更巧妙的版本:

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

+0

要添加到Bill的答案 - Notch将不得不使用类似JRebel的东西来实际替换代码。具有调试模式的Eclipse增量编译器仍然局限于HotSwap。 – Adam 2014-12-14 19:20:12

+0

@Adam此视频:https://www.youtube.com/watch?v=rhN35bGvM8c约30分钟 - 你能告诉他是否使用JRebel?我从来没有见过他参考它。在日食中不会有一些可见性吗?工具栏看起来像股票日蚀 - JRebel甚至没有添加图标? – 2014-12-15 00:02:46

+0

如果您注意到,Notch更改而不重新启动应用程序的唯一方法是方法体。大多数时候,他的代码实际上并没有运行,他只是从内存中修改他想做的事情。他正在启动他的应用程序,并启用调试模式并更改方法体,或者杀死应用程序并反复调试。这很有趣,因为我们实际上有人使用JRebel和minecraft。也许他应该试试看。 :) – Adam 2015-03-02 00:22:58