2010-10-08 14 views
8

Il mio programma Java è funzionante quando lo uso in Windows (Eclipse e Bluej). Lo comprimo in un barattolo e lo mando al mio cappello rosso e botto. niente funziona. Si rompe sulle cose più strane, come ad esempio il testo del campo di testo non verrà mostrato, JPasswordfield è appena scomparso, anche Java AWT ROBOT muore ... la lista continua, prima pensavo che fosse il mio Linux JRE non è aggiornato, ma io installato più tardi JRE quindi il JDK senza alcun miglioramento. Ho la sensazione che manchi la capacità di cross-platform di Java. Ho anche provato a rimuovere tutte le mie funzioni e il mio coraggio per vedere cosa si sta rompendo, ma sembra che ogni secondo si stia rompendo, a parte alcuni dei principali componenti della GUI e la maggior parte delle cose di back-end. praticamente qualsiasi cosa che usi un po 'di cose di fantasia mi esploderà in faccia, come fare un campo di testo in un campo password ...Java compilato in Windows funziona in Linux?

Questa è la mia prima pubblicazione, per favore sii gentile con il novellino!

Grazie !!!

RISOLTO !!! Yay. Problema risolto!!! Era perché il mio percorso Java non era impostato, quindi il mio GCC/GCJ è saltato dentro invece del mio oracle java, anche se ho usato java-jar xxx.jar. così ho inserito il percorso della directory java dal mio java-jar xxx.jar e ho funzionato come un incantesimo. se non si imposta il percorso, si è necessario farlo manualmente

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

java -version per verificare se il tuo vero java è in esecuzione o se è ancora GCJ

+0

È multipiattaforma (ad esempio non è necessario ricompilare i JAR), ma ci sono ancora alcune stranezze, quindi è necessario fare attenzione. Dovresti pubblicare un programma relativamente piccolo che mostri problemi su Linux. –

+0

La mia esperienza in 1.4 era che SWING non era in realtà portatile, ma da allora non posso parlare per le versioni. AWT era leggermente più sicuro ... –

+2

@OMG: Swing è molto portatile. I problemi che le persone hanno (come nei controlli non allineati correttamente) hanno più a che fare con i programmatori che non usano i layout in modo propositivo. –

risposta

11

Gli utenti Linux eseguono spesso programmi java con gcj anziché java. Verifica di utilizzare un eseguibile corretto.

+0

oh sto usando effettivamente gcj -jar xxx per eseguire il mio Jar – JavaLu

+1

@ JavaLu: Penso che sia il tuo problema proprio lì. Su Linux, dovresti usare OpenJDK o Sun's Java. –

+0

Sì, questa è la risposta giusta. Grazie ragazzi!!!! – JavaLu

4

Sì. I formati di classe e jar sono volutamente multipiattaforma.

Sei assolutamente sicuro che il tuo file jar sia stato copiato correttamente sulla tua macchina Linux? Se hai usato ftp, è fondamentale usare il binario invece del trasferimento ASCII.

+1

Se si trattava di un problema binario/ascii, il file .jar non sarebbe nemmeno leggibile come valido. Niente funzionerebbe affatto. –

+0

ho usato il comandante totale su FTP, non posso testare adesso come sono lontano dalla mia scatola. non so se fosse ftp o ascii, ma proverò a usare il mio stick Mem. – JavaLu

+0

Dipende dai pattern di bit presenti nel file trasferito. –

3

L'applicazione dipende da eventuali librerie esterne che devono essere disponibili anche sul computer Linux?

+1

Se questo fosse il problema, ci sarebbero ClassDefNotFoundException lanciati dappertutto. –

+0

Vero, ma non abbiamo molto altro da fare se non un vago "è rotto". – Dave

+0

ehm, io sono fuori dalla mia scatola quindi non riesco a ricordare tutti gli errori. Ricordo uno di loro: java.lang.error: non implementato. scusa per non essere stato preparato, mi aspettavo 5 ore prima della prima risposta e meno intenso. – JavaLu

1

Stai usando KDE? Quale tema? Ho avuto un problema ieri che il tema "Cleanlooks" ha molti bug che rendono i widget. Prova "Ossigeno".

Se è possibile, provare il codice su una macchina Linux diversa (forse ha un difetto hardware). Esegui "memtest" (dovrebbe essere un'opzione nel boot loader o nel tuo CD di ripristino).

2

Java dice: "Scrivi una volta, corri ovunque".

+1

Quando si parla di Swing, in realtà è più simile a "Scrivi una volta, prova ovunque" – finalman

+0

* Scrivi una volta, esegui ovunque * è più vero per C che per Java. Java dovrebbe essere ** compilato ** * una volta, eseguito ovunque con una JVM *. –

+1

nota che WORA non si applica ai metodi nativi/libs –

1

L'oscillazione deve essere completamente portatile. Prova a utilizzare l'aspetto metallico, che è ampiamente supportato. Ho i miei dubbi su java.awt.Robot e non sarei sorpreso se questa fosse la fonte dei tuoi problemi.

1

Ho un'app Swing che ho distribuito tramite Java Web Start che non ho aggiornato dal 2004 e che so funziona ancora bene su Mac OS X, Windows e Linux. L'ho eseguito solo l'altro giorno perché qualcuno mi ha inviato una domanda via email. È stato originariamente scritto su Windows ma non ha mai mostrato problemi su altri sistemi operativi o anche in versioni molto più recenti di Java.

La JVM presenta un campo di gioco molto uniforme su una vasta gamma di piattaforme e l'API Java è ben implementata per funzionare allo stesso modo e offre le stesse funzionalità. La mia scommessa è che troverai che questo problema è qualcosa di completamente estraneo al tuo codice Java.Oltre al suggerimento di provare la tua app su un'altra macchina con lo stesso sistema operativo, assicurati di provare le app Java di altre persone in esecuzione su quella che sta dando problemi. Prova il mio HotSheet: http://www.johnmunsch.com/projects/HotSheet/ o un gioco come Legerdemain: http://roguelikefiction.com/?page_id=6 per vedere se funzioneranno.

5

Verificare di utilizzare il JRE di Sun (Oracle) sul computer Linux e non alcune implementazioni Java di terze parti come gcj o simili.

In base alla mia esperienza, le applicazioni Java sono abbastanza portabili fintanto che ci si attiene allo stesso fornitore di JVM/runtime su ogni SO di destinazione, ma le implementazioni Java di diversi fornitori potrebbero comportarsi in modo diverso l'una dall'altra.

+0

Vedo, sto usando gcj per eseguire il mio Jar. Ho oracle installato jre ma non sono sicuro di quale sia il comando per eseguire il jar. – JavaLu

+0

'java -jar JarName' :-) – Grodriguez

+0

BTW puoi usare' which java' per scoprire quale comando java viene effettivamente invocato. – Grodriguez

0

Java è molto trasportabile. È probabile che la tua VM sia diversa. Anche se le VM Open Source stanno diventando molto buone, consiglio di provare con la VM di Sun - non ho mai avuto problemi con l'esecuzione di alcun codice.

Inoltre, se si utilizza le librerie con componenti in linguaggio macchina, chi dovrà essere differente (ho notato questo con alcune librerie grafiche che richiedono fino al sottosistema 3d della piattaforma)

Ma Java stessa sarà porta facilmente a qualsiasi sistema che abbia le stesse librerie e una buona VM Molto bene: lo faccio sempre e lo faccio da dieci anni e letteralmente non ho mai avuto un problema. Si tratta di sistemi client/server in cui i client e il server erano su piattaforme diverse, PC/Mac & Unix e persino sistemi incorporati - roba solo porte.

Ora, le applet sono in esecuzione in diversi browser, o cercando visivamente di far corrispondere i caratteri su macchine che non contengono lo stesso carattere - Nulla vi aiuterà.

1

su Linux potrebbe essere fondamentale per utilizzare il Sun JDK/JRE e non l'OpenJDK, che è un implementazione del JDK ufficiale Sun Java. Quindi potrebbe essere quello, anche se non è affatto sicuro.

Problemi correlati