Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java swing应用程序是否支持动态代码编译?_Java_Swing - Fatal编程技术网

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

Java swing应用程序是否支持动态代码编译?,java,swing,Java,Swing,我正在开发一个基于Swing的应用程序,并对源代码进行了更改。我本以为JVM会重新编译更改后的代码,但这并没有发生,是吗 当更改java源文件时,JVM从webapps后台进行编译,识别到更改并在Tomcat容器中重新编译,因此我不需要按类路径重新加载(通过重新启动Tomcat服务器)。如果变化很大,那么这并不总是有效的 我更改了来源。我本以为JVM会重新编译更改后的代码,但这并没有发生。应该有吗 不可以。假设您使用的是标准Java工具链,那么只有在运行javac时才会编译源代码。当然,JVM(

我正在开发一个基于Swing的应用程序,并对源代码进行了更改。我本以为JVM会重新编译更改后的代码,但这并没有发生,是吗

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

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

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


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


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

这取决于您使用的工具(例如IDE)。JVM本身不会自动为您重新编译源代码。不,您必须重新启动appSee。