2010-10-08 6 views
8

Mon programme Java est en état de marche lorsque je l'utilise sous Windows (Eclipse et Bluej). Je le comprime dans un pot et l'envoie à mon chapeau rouge et bang. rien ne fonctionne. Il se brise sur les choses les plus étranges, comme le texte du champ texte ne sera pas affiché, JPasswordfield a juste disparu, Java AWT ROBOT meurt aussi ... la liste continue, d'abord je pensais que mon Linux JRE était obsolète, mais je installé le dernier JRE puis le JDK sans amélioration du tout. J'ai le sentiment que j'ai manqué de comprendre la capacité de croix en Java. J'ai également essayé d'enlever toutes mes fonctions et mes tripes pour voir ce qui se casse mais il semble que chaque seconde chose casse, à part quelques-uns des principaux composants de l'interface graphique et la plupart du back-end. fondamentalement toute chose qui utilise quelque chose de fantaisie va exploser dans mon visage, comme faire un champ de texte dans un champ de mot de passe ...Est-ce que Java compilé dans Windows fonctionnera sous Linux?

Ceci est ma première fois de publication;) s'il vous plaît soyez gentil avec le débutant!

Merci !!!

RÉSOLU !!! Yay. Problème résolu!!! C'est parce que mon chemin Java n'est pas défini, donc mon GCC/GCJ a sauté à la place de mon oracle java, même si java -jar xxx.jar a été utilisé. J'ai donc mis dans le répertoire java de mon java -jar xxx.jar et j'ai travaillé comme un charme. sauf si vous définissez le chemin, vous devez le faire manuellement

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

java -version pour vérifier si votre vrai java est en cours d'exécution ou si c'est toujours GCJ

+0

Il s'agit d'une plateforme multiplateforme (par exemple, vous n'avez pas à recompiler les fichiers JAR), mais il y a encore quelques bizarreries, vous devez donc faire attention. Vous devriez poster un programme relativement petit qui présente des problèmes sous Linux. –

+0

Mon expérience dans 1.4 était que SWING n'était pas réellement portable, mais je ne peux pas parler pour les versions depuis. AWT était légèrement plus sûr ... –

+2

@OMG: Swing est très portable. Les problèmes que les gens ont (comme dans les contrôles ne s'alignent pas correctement) a plus à voir avec les programmeurs n'utilisant pas les mises en page proprement. –

Répondre

11

Les utilisateurs Linux exécutent souvent des programmes Java avec gcj au lieu de Java. Vérifiez que vous utilisez un exécutable correct.

+0

oh je suis en train d'utiliser gcj -jar xxx pour exécuter mon Jar – JavaLu

+1

@JavaLu: Je pense que c'est votre problème là. Sous Linux, vous devez utiliser OpenJDK ou Java de Sun. –

+0

Oui, c'est la bonne réponse. Merci les gars!!!! – JavaLu

4

Oui. Les formats classe et jar sont intentionnellement multiplateforme. Etes-vous absolument certain que votre fichier jar a été copié correctement sur votre machine Linux? Si vous avez utilisé ftp, il est crucial d'utiliser un transfert binaire au lieu d'un transfert ascii.

+1

S'il s'agissait d'un problème binaire/ascii, le fichier .jar ne serait même pas lisible comme valide. Rien ne fonctionnerait du tout. –

+0

J'ai utilisé le commandant total pour FTP, je ne peux pas tester maintenant que je suis loin de ma boîte. Je ne sais pas si c'était ftp ou ascii, mais je vais essayer d'utiliser mon stick Mem. – JavaLu

+0

Cela dépend des modèles de bits présents dans le fichier transféré. –

3

Votre application dépend-elle des bibliothèques externes dont vous avez également besoin sur votre machine Linux?

+1

Si c'était le problème, il y aurait des ClassDefNotFoundExceptions lancées partout. –

+0

C'est vrai, mais nous n'avons pas grand chose à faire d'autre qu'un vague "c'est cassé". – Dave

+0

euh, je suis loin de ma boîte, donc je ne peux pas me rappeler toutes les erreurs. Je me souviens de l'un d'entre eux: java.lang.error: non implémenté. désolé de ne pas être prêt, je m'attendais à 5 heures avant la première réponse et moins intense. – JavaLu

1

Utilisez-vous KDE? Quel thème? J'ai eu un problème hier que le thème "Cleanlooks" a beaucoup de bugs rendant des widgets. Essayez "Oxygen".

Si vous le pouvez, essayez le code sur une autre machine Linux (peut-être qu'elle a un défaut matériel). Exécutez "memtest" (devrait être une option dans le chargeur de démarrage ou sur votre CD de secours).

2

Java dit: "Écrivez une fois, courez partout".

+1

Quand il s'agit de Swing, c'est en fait plus comme "Ecrire une fois, tester partout" – finalman

+0

* Écrire une fois, courir n'importe où * est en fait plus vrai pour C que pour Java. Java est supposé être ** compilé ** * une fois, exécuté n'importe où avec une JVM *. –

+1

notez que WORA ne s'applique pas aux méthodes/bibliothèques natives –

1

Swing devrait être entièrement portable. Essayez d'utiliser l'aspect et la sensation de métal, ce qui est largement pris en charge. J'ai mes doutes sur java.awt.Robot et je ne serais pas surpris si c'était la source de vos problèmes.

1

J'ai une application Swing que j'ai distribuée via Java Web Start que je n'ai pas mise à jour depuis 2004 et qui fonctionne encore correctement sur Mac OS X, Windows et Linux. Je l'ai couru juste l'autre jour parce que quelqu'un m'a envoyé une question à ce sujet. Il a été écrit à l'origine sur Windows, mais n'a jamais montré de problèmes sur d'autres systèmes d'exploitation ou même dans de nombreuses versions ultérieures de Java. La JVM présente un terrain de jeu très homogène sur une grande variété de plates-formes et l'API Java est bien implémentée pour fonctionner de la même manière et offrir les mêmes fonctionnalités. Mon pari est que vous trouverez ce problème est complètement indépendant de votre code Java.En plus de la suggestion d'essayer votre application sur une autre machine exécutant le même système d'exploitation, assurez-vous d'essayer les applications Java d'autres personnes en cours d'exécution sur celle qui pose problème. Essayez ma propre HotSheet: http://www.johnmunsch.com/projects/HotSheet/ ou un jeu comme Legerdemain: http://roguelikefiction.com/?page_id=6 pour voir si cela fonctionnera.

5

Vérifiez que vous utilisez JRE de Sun (Oracle) sur votre machine Linux et non une implémentation Java tierce telle que gcj ou les goûts. Selon mon expérience, les applications Java sont assez portables tant que vous vous en tenez au même fournisseur JVM/runtime sur chaque SO cible, mais les implémentations Java de différents fournisseurs peuvent se comporter différemment les unes des autres.

+0

Je vois, j'utilise gcj pour lancer mon Jar. J'ai installé Oracle mais je ne suis pas sûr de ce qui est la commande pour exécuter le pot. – JavaLu

+0

'java -jar JarName' :-) – Grodriguez

+0

BTW vous pouvez utiliser' which java' pour savoir quelle commande java est réellement appelée. – Grodriguez

0

Java est très transportable. Les chances sont que votre VM est différente. Bien que les VMs Open Source soient très bonnes, je recommande d'essayer avec la VM de Sun - Je n'ai jamais eu de problème avec l'exécution de code.

En outre, si vous utilisez des bibliothèques avec des composants de langage machine, ceux-ci doivent être différents (je l'ai remarqué avec quelques bibliothèques graphiques qui font appel jusqu'au sous-système 3D de la plate-forme)

Mais Java lui-même Port facilement à n'importe quel système qui a les mêmes bibliothèques et une bonne VM Très bien - Je le fais tout le temps et l'ai fait pendant dix ans et n'a littéralement jamais eu de problème. Cela fonctionne sur des systèmes client/serveur où les clients et le serveur se trouvaient sur des plates-formes différentes, PC/Mac & Unix et même les systèmes embarqués - ne contiennent que des ports.

Maintenant, les applets s'exécutent dans différents navigateurs, ou visuellement en essayant de faire correspondre les polices sur des machines qui ne contiennent pas la même police - Rien ne vous y aidera.

1

Sur linux il pourrait être crucial d'utiliser Sun JDK/JRE et pas OpenJDK, qui est une mise en œuvre du soleil officiel java jdk. Donc, il pourrait être cela, mais pas sûr du tout.

Questions connexes