2013-11-09 89 views
0

几个月前,我创建了一个计算国际象棋等级的Java应用程序。我只在我的电脑上测试过它,但程序按预期工作。Java JAR文件在不同的操作系统上表现不同

我只是发现,在某些操作系统上,该程序无法正常工作。我在Windows 7中包含了错误输出的图片,而这正是我在Windows 8上得到的结果。 (该球员的评分应该会下降,因为他对比较低的评分反对者只得到1.5/5分)。看起来该程序不允许玩家的评分降低。

任何人都可以指出我正确的方向,为什么程序在这两个版本的Windows之间的行为有所不同?我无法在SO或其他任何地方找到任何解释。

+0

其他人很难猜测出什么问题。但找到它的方式是与断点和/或记录并行运行程序。 –

+0

也许不同的JRE?尝试添加System.out.println();在不同的变量上查看差异。 – APerson

回答

0

对于未来的Google员工来说,问题不在于Java;这是我的程序读取数据的文本文件中的换行符的问题。出于某种原因,在我的文本文件中分隔值的“\ n”字符在Windows 7中没有显示,但在Windows 8中运行正常。很奇怪,但很高兴它已修复!

2

我认为最合理的解释是Windows 7的版本有不同的说法有在现场2:2068,而Windows 8中有2048

+0

这只是一个非常小的差异。它根本不会改变产量。问题在于基于任何输入(在Windows 7上),玩家的评分变化不会降低, –

0

首先,这里有一对夫妇的事情,不会是原因。

  • 算术不Java之间的不同的行为在Windows 7和8。如果您正在使用相同的输入相同的(单线程)算法,那么输出应该是相同的。

  • 算法在32位和64位JVM上没有变化。

那么它会是什么?假设它是相同的JAR,那么算法可能不会改变。所以这里有几个可能性。

  • 这可能是不同投入的结果。如果不考虑算法,我们不能排除它存在的某种可能性,从而使其对输入非常敏感。

  • 如果代码中存在竞争条件,则可能发现程序的某些方面在某些Java平台上无法正常工作......由于CPU速度,内存体系结构和/或线程的差异调度。


这是我们所确切的答案,你可能得到...不看你的代码。所以我认为你自己必须去调试

  • 可以访问某些出现问题的Windows 7计算机。

  • 使用附加的调试器运行应用程序,以查看问题是否在这些条件下重复出现。如果是这样,那么以正常方式调试以找出算法不起作用的原因。

  • 如果安装调试器(和设置断点)改变程序的行为方式(即它使问题“走开”),那么你有证据指向某种形式的竞争状态。

相关问题