0

我遇到了一个非常烦人的问题,想象一下我编译了 FooBar.java 文件:

$ javac FooBar.java

它编译成功,然后我像往常一样运行它:

$ java FooBar < in.txt

我得到了预期的输出,交易是,如果我更改源代码(FooBar.java)以打印其他内容并再次编译它,我会得到与第一次相同的输出!

这真的让我很生气...... javac 有缓存吗?即使我删除 FooBar.class 并重新编译,我也会从早期源代码中获得输出。我发现解决这个问题的唯一方法是删除 FooBar.java 并创建一个具有不同名称的新文件(我只是复制粘贴了代码),这是可行的。

这个错误(?)真的困扰着我。我已经寻找解决方案或解释为什么会发生这种情况,但没有运气。

这似乎与我的问题有关,但并不完全因为我没有使用任何 IDE 并且 Classpath 指向我的工作文件夹: http: //www.coderanch.com/t/519372/java/java/Executing-Old-Code

我想找出导致这种情况的原因,因为我不想每次更新源代码时都创建一个新文件......我在 Windows 上使用 Java 1.6.0_27

谢谢阅读...

4

2 回答 2

1

有包装声明吗?自从您第一次编译它以来,您可能已经放入了一个包声明。如果你有 foo.bar 包,编译器将在 foo/bar/FooBar.class 中创建 .class 文件,你应该使用 .class 运行它java foo.bar.FooBar。如果没有包,它将创建 ./FooBar.class 并通过 ./FooBar.class 运行它java FooBar

于 2012-08-16T01:00:04.177 回答
0

问题不会是缓存。试试这个:

  1. 查看 FooBar.class 文件上的时间戳(这就是 RUN)
  2. 再次编译javac ...
  3. 再次查看时间戳。它改变了吗?如果没有,你正在编译到某个地方。
  4. 其他海报对包裹的评论可以解释这一点。也可以通过设置/更改您的类路径来解释
于 2012-08-16T02:06:51.080 回答