
修改 Java 源文件后未生效,通常是因为未重新编译生成 .class 字节码文件;Java 运行的是编译后的类文件而非源代码,必须执行 javac 编译再用 java 运行,否则所有改动(如修复帧转秒的舍入误差)均不会体现。
修改 java 源文件后未生效,通常是因为未重新编译生成 `.class` 字节码文件;java 运行的是编译后的类文件而非源代码,必须执行 `javac` 编译再用 `java` 运行,否则所有改动(如修复帧转秒的舍入误差)均不会体现。
在数据处理脚本中集成 Java 工具(例如将视频帧号转换为秒级时间戳)时,一个常见误区是:直接编辑 .java 文件后立即运行脚本,却未意识到 JVM 实际加载的是已存在的 .class 文件(或打包在 JAR 中的旧版本)。这正是你遇到“print 语句不输出”“数值未更新”“删掉 .java 文件程序仍正常运行”的根本原因——脚本调用的并非源码,而是早已编译好的字节码。
✅ 正确流程如下:
-
保存修改后的
.java文件(例如FrameConverter.java); -
手动编译生成
.class文件:<code class="bash">javac FrameConverter.java</code>
若类依赖外部库(如
lib.jar),需指定类路径(Classpath):- macOS / Linux:
<code class="bash">javac -cp .:lib.jar FrameConverter.java</code>
- Windows:
<code class="bash">javac -cp .;lib.jar FrameConverter.java</code>
- macOS / Linux:
-
运行编译后的类(注意:不带
.class后缀,且主类名须与文件内public class名一致):<code class="bash">java -cp .:lib.jar FrameConverter</code>
(Windows 使用
.;lib.jar)
⚠️ 关键注意事项:
- 确保
.class文件与调用它的脚本(如 Python 的subprocess或 Shell 脚本)位于同一目录,或已正确配置-cp; - 若原脚本通过
java -jar your-tool.jar启动,则修改.java源码无效——你必须重新编译整个项目并重新打包 JAR(使用jar cvf your-tool.jar *.class或构建工具如 Maven); - 检查类名与文件名是否严格一致(含大小写),Java 编译器对此敏感;
- 清理残留
.class文件可避免混淆:rm *.class(macOS/Linux)或del *.class(Windows)。
? 小技巧:在 FrameConverter.java 中加入 System.out.println("Version: 1.2"); 并重新编译运行,是最快速验证改动是否生效的方法。若该输出出现,说明编译与执行链路已打通;再聚焦排查帧→秒转换逻辑中的浮点精度问题(例如改用 double 运算、避免整数除法 frame / fps,应写为 frame / (double) fps)。
遵循此编译-运行闭环,你的数据预处理脚本才能真正响应代码修改,确保时间戳转换准确可靠。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











