2010-10-08 75 views
8

当我在Windows(Eclipse和Bluej)下使用它时,我的Java程序处于正常工作状态。我把它压缩成一个罐子,然后送到我的红帽子和砰砰声。没有用。它打破了最奇怪的事情,如文本字段设置文本不会显示,JPasswordfield刚刚消失,Java AWT机器人也死了...名单继续,首先我认为它一定是我的Linux JRE过时了,但我安装最新的JRE,然后JDK完全没有改进。我有一种感觉,我错过了解Java跨平台的能力。我还尝试删除所有的功能和内核,以查看哪些内容已经突破,但似乎每一秒都会突破,除了一些主要的GUI组件和大部分后端内容外。基本上任何使用某些东西的东西都会在我的脸上炸开,比如在一个密码字段中创建一个文本字段...将在Windows中编译的Java在Linux中工作吗?

这是我第一次发布;)请对这个新手感兴趣!

谢谢!

已解决! 耶。问题解决了!!!这是因为我的Java路径没有设置,所以我的GCC/GCJ跳进来,而不是我的oracle java,即使我用java -jar xxx.jar。所以我从我的java -jar xxx.jar中放入了java目录路径,并像魅力一样工作。除非您设置的路径,你必须这样做手工

/usr/java/jdk1.6.0_21/jre/bin/java罐子xxxxx.jar

Java的版本检查,如果你真正的Java正在运行或者如果它仍然是GCJ

+0

它是跨平台(例如,您不必重新编译的JAR文件),但仍然有一些怪癖,所以你必须要小心。你应该发布一个相对较小的程序来显示Linux上的问题。 – 2010-10-08 16:06:21

+0

我在1.4版本中的经验是,SWING实际上不是可移植的,但从那以后我就不能说版本了。 AWT稍微安全一些...... – 2010-10-08 16:06:38

+2

@OMG:Swing非常便携。人们遇到的问题(如控件没有正确排列)更多的是程序员不使用布局。 – 2010-10-08 16:16:38

回答

11

Linux用户通常使用gcj而不是java来运行java程序。检查你使用了正确的可执行文件。

+0

哦,我实际上使用gcj -jar xxx来运行我的Jar – JavaLu 2010-10-08 16:50:58

+1

@JavaLu:我认为那就是你的问题。在Linux上,您应该使用OpenJDK或Sun的Java。 – 2010-10-08 18:23:49

+0

是的,那答案没问题。多谢你们!!!! – JavaLu 2010-10-09 04:56:07

4

是的。类和jar格式是故意跨平台的。

你确定你的jar文件被正确地复制到你的Linux机器上了吗?如果你使用ftp,使用二进制代替ascii传输是至关重要的。

+1

如果这是一个二进制/ ascii问题,那么.jar文件甚至不可读为有效。没有什么会工作。 – 2010-10-08 16:29:04

+0

我用总指挥官的FTP,我不能现在测试,因为我离开我的箱子。不知道它是ftp还是ascii,但我会尝试使用我的Mem棒。 – JavaLu 2010-10-08 16:53:12

+0

这取决于传输文件中存在的位模式。 – 2010-10-08 16:57:03

3

您的应用程序是否依赖于您的Linux机器上还需要的任何外部库?

+1

如果这是问题,那么将抛出ClassDefNotFoundExceptions遍布整个地方。 – 2010-10-08 16:29:28

+0

的确如此,但除了模糊的“它已经坏了”之外,我们没有太多东西可以继续。 – Dave 2010-10-08 16:30:57

+0

呃,我远离我的箱子,所以我不记得所有的错误。我记得其中的一个tho:java.lang.error:未实现。 抱歉没有准备,我期待5小时前的第一个答复和不太激烈。 – JavaLu 2010-10-08 17:02:00

1

您是否在使用KDE?哪个主题?昨天我有一个问题,“Cleanlooks”主题有很多渲染小部件的bug。尝试“氧气”。

如果可以,请尝试使用不同Linux机器上的代码(可能它有硬件缺陷)。运行“memtest”(应该是引导装载程序或救援CD中的一个选项)。

2

Java说:“写一次,运行在任何地方”。

+1

当谈到Swing时,它实际上更像是“一次编写,无处不在测试” – finalman 2010-10-08 16:23:18

+0

*编写一次,随处运行*实际上对于C来说比Java更真实。 Java应该是**编译** *一次,在任何有JVM *的地方运行。 – 2010-10-08 16:24:46

+1

请注意,WORA不适用于本地方法/库 – 2010-10-08 16:34:52

1

摆动应该完全便携。尝试使用广泛支持的金属外观。我对java.awt.Robot有怀疑,如果这是你的问题的根源,不会感到惊讶。

1

我有一个Swing应用程序,我通过Java Web Start发布,自2004年以来我没有更新过,我知道它在Mac OS X,Windows和Linux上仍然可以正常工作。我前几天跑了,因为有人给我发了一个关于它的问题。它最初是在Windows上编写的,但从未在其他操作系统或甚至远远晚于Java的版本中显示任何问题。

JVM在各种各样的平台中提供了一个非常公平的竞争环境,并且Java API可以很好地实现相同的功能并提供相同的功能。我敢打赌,你会发现这个问题与你的Java代码完全无关。除了在运行相同操作系统的另一台计算机上尝试应用程序的建议之外,请务必尝试其他人在出现问题的人的Java应用程序上运行。试试我自己的HotSheet:http://www.johnmunsch.com/projects/HotSheet/或像Legerdemain这样的游戏:http://roguelikefiction.com/?page_id=6,看看这些是否可行。

5

检查你正在使用你的Linux机器上太阳(甲骨文)JRE,而不是某些第三方Java实现,如GCJ或喜欢。

以我的经验,Java应用程序是相当便携,只要你坚持在同一个JVM /运行商对每一个目标如此,但来自不同供应商的Java实现的行为可能各不相同。

+0

我看到了,我正在使用gcj来运行我的罐子。我有oracle安装jre,但不知道运行jar的命令是什么。 – JavaLu 2010-10-08 18:09:12

+0

'java -jar JarName' :-) – Grodriguez 2010-10-08 18:11:52

+0

顺便说一下,您可以使用'which java'来找出哪个java命令实际上被调用。 – Grodriguez 2010-10-08 18:18:49

0

Java是很运输。机会是你的虚拟机是不同的。尽管开源虚拟机越来越好,但我建议使用Sun的虚拟机 - 我从来没有遇到过运行任何代码的问题。

此外,如果您使用的机器语言成分的库,这些将要被不同

但Java本身(我和一些图形库,通过对平台的3D子系统调用注意到了这一点)轻松移植到具有相同库和良好虚拟机的任何系统上。非常好 - 我一直都这样做,并且已经这么做了十年,从字面上看它从来没有出现过问题。这是运行的客户端/服务器系统,客户端和服务器位于不同的平台上,Unix甚至嵌入式系统 - 只是端口。

现在,在不同的浏览器运行小程序,或者在视觉上试图匹配不包含相同的字体的字体的机器 - 没有什么会帮助你。

1

在Linux上可能是使用Sun JDK/JRE的关键, OpenJDK的,这是官方的Sun Java JDK的实施。所以可能是这样,虽然不能确定。