swing应用程序是否支持动态代码编译?

时间:2016-02-15 15:13:25

标签: java swing

我正在开发基于Swing的应用程序,并对源代码进行了更改。我原以为JVM会重新编译更改后的代码,但这不会发生,如果有的话?

在更改java源文件时,从Web应用程序后台进行编译,JVM识别出更改并在Tomcat容器中重新编译,因此我不需要通过类路径重新加载(通过重新启动Tomcat服务器)。如果变化很大,那么这并不总是有效。

1 个答案:

答案 0 :(得分:1)

  

我对源进行了更改。我原以为JVM会重新编译更改后的代码,但这并没有发生。应该有吗?

没有。假设您使用的是标准Java工具链,那么只有在运行java时才会编译源代码。当然,JVM(即{{1}})既不编译源代码,也不会在源代码更改时发出通知。实际上,它甚至没有注意到" .class"文件已更改 1 。 另一方面,如果您使用IDE进行开发/编译/运行,那么它(而不是JVM)通常会注意到源代码何时更改并自动重新编译它。但是如果您碰巧在更改应用程序的同时运行,则通常的更改不会影响正在运行的程序 2

1 - 可以对应用程序进行编码,使其注意到更改并尝试重新加载重新编译的类,但是这样做有很多问题和潜在的陷阱。 (每次加载一个类会给你一个不同的类型......就运行时类型系统而言。除非你可以重新加载整个应用程序,否则它会变得很麻烦。)

2 - 当您对正在调试的类使用的类进行更改时,某些IDE(例如Eclipse)会注意到,并且提供您可以选择重新启动正在调试的应用程序。