在后台运行的旧版Java应用程序的流氓实例?

时间:2010-09-27 23:46:21

标签: java eclipse jvm

我是Java的新手(来自C ++ / .NET背景)并且遇到了非常奇怪的错误。我在本地桌面上的Windows XP上开发了Eclipse IDE。似乎由于某种原因,我的应用程序的一个较旧的(当然是buggier)实例保持运行的一些非常奇怪的原因,我无法理解。

即使我关闭了eclipse,我的应用程序的旧版本也在后台运行。因此,除非我重新启动,当我尝试测试新版本的代码时,这个“旧的,流氓实例”正在争夺使用的资源(共享中的文件)与更新(跳得少的错误)版本的代码。

有没有人经历过这个? JVM是否出于某种原因缓存旧版Java应用程序?我在这里错过了什么?当我重启我的机器时,实例终于死了......

我正在试图弄清楚为什么我的代码的新版本仍然有同样的旧bug,直到我意识到这发生了...... 耸肩

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

Java应用程序在“java.exe”下运行,因此您可以在任务列表中查找。遗憾的是,如果几个Java应用程序同时运行,很难说哪个是哪个。

我对Eclipse并不十分熟悉,但看起来Eclipse应该在关闭Eclipse时告诉旧版本终止。 JVM不会缓存过去的版本。

希望这有帮助。

答案 1 :(得分:1)

你是不是偶然地运行你的程序,或者在从Eclipse重新运行它之前忘记关闭它的一个实例?

有一点,使用Eclipse时不是很明显,它允许同时运行任意数量的Java程序实例。当Console视图处于活动状态时,您可以选择终止最新的启动。

要将控制台切换到其他启动(如果有多个正在运行),您可以通过在“控制台”视图中按“显示所选控制台”图标(右上角的监视器图标)从列表中进行选择。 您还可以通过按“删除所有已终止的启动”从控制台视图中删除任何和所有已终止的启动控制台输出,如果每次启动都已终止,它现在应显示“此时无显示控制台”,否则为下一个最新版本正在运行的发射将被带到顶端。

如果这不是问题,事实上Eclipse已经失去了启动的轨道(这种情况非常罕见,但可能会发生 - 特别是如果你自己产生子进程),你可以安全地终止任何run-amock java.exe来自任务管理器的进程,因为Eclipse运行在Windows平台上的Windows可执行文件中。

答案 2 :(得分:1)

我也有这样的问题。我会尝试在进行更改后运行该程序,它将运行它的旧版本,仍然报告错误并停止我甚至已经注释掉的行。我尝试了micdah's solution,但在任务管理器中没有 java.exe 进程。我通过从任务管理器中删除Eclipse进程解决了这个问题,任务管理器在没有保存Eclipse Workspace 设置的情况下关闭了程序。当我重新启动时,我在 .java 文件中保存的所有内容都正常启动。

答案 3 :(得分:0)

可能是Eclipse中的错误。可能是您的应用程序中的某些代码正在生成一个新进程。从这里无法分辨。

如果您还没有,请查看常规JDK附带的jps tool。它可能会更容易诊断问题。