java - swing应用程序支持动态代码编译吗?

标签 java swing

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

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

最佳答案

I made a change to to the source. I would have thought that the changed code be recompiled by the JVM but this did not occur. Should it have ?

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

<小时/>

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

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

关于java - swing应用程序支持动态代码编译吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35412823/

相关文章:

eclipse - 使用 zip 迁移时 WindowBuilder 不显示“设计”选项卡

java - 为什么重复调用 repaint() 方法不起作用

java - 如何使用另一个组合框 Swing 来控制组合框

java - 现代 HTML/CSS/JS 布局以及 Java 后端

java - SOAP 连接握手期间远程主机关闭连接

java - 如何在Java中读取数字的每一位数字

java - 我的 s3 存储桶中的图像不会在浏览器中打开,它们只会下载

java - 如何将 JFileChooser 中的文件名字段设置为用户想要保存的文件?

java - 如何垂直对齐 JLabel-JTextField 对

java - JTable中如何将整行数据加粗?