CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[java] question sur la portabilité.

lokilok
lokilok
Niveau 16
17 août 2012 à 16:17:07

Bonjour, depuis quelque temps je me pose une question (je précise juste que je ne connais rien en java), je voudrais savoir si un programme fait en java tournera sur toutes les plateformes qui prennent java en charge.

En gros est-ce qu'un programme qui fonctionne sous windows fonctionnera sous linux.

J'ai cherché un peu, et vu qu'il y avait certaines fonctions spécifique a un OS, ou d'autres trucs bas niveau qui ferait que le programme puisse ne pas tourner sur deux OS différent, mais on m'affirme que c'est faux donc je sais pas vraiment ce que je dois en penser.

Aussi d'après ce que je sais, en c++ il y a la fonction system() qui exécute des commandes système, j'imagine qu'il doit y avoir la même chose en java, et vu que les commandes système ne sont pas les même sous windows et sous linux, ça pourrait créer des problèmes de portabilité non ?

Merci d'avance.

Pseudo supprimé
Pseudo supprimé 17 août 2012 à 16:21:42

--
En gros est-ce qu'un programme qui fonctionne sous windows fonctionnera sous linux.
--

Oui.

--
J'ai cherché un peu, et vu qu'il y avait certaines fonctions spécifique a un OS
--

Non. En fait, si mais ce sont des détails masqués au développeur (séparateur de chemin, de nom de fichiers, etc). Si tu programmes proprement, le fonctionnement sera transparent quelque soit l'OS.

--
Aussi d'après ce que je sais, en c++ il y a la fonction system() qui exécute des commandes système, j'imagine qu'il doit y avoir la même chose en java, et vu que les commandes système ne sont pas les même sous windows et sous linux, ça pourrait créer des problèmes de portabilité non ?
--

Ah, bah oui. Mais ce n'est plus lié à Java. Si tu codes en java en faisant des injections de shell, c'est évident que ça ne sera plus portable. Mais c'est le cas avec n'importe quel langage.

chris_27
chris_27
Niveau 10
17 août 2012 à 16:52:22

« En gros est-ce qu'un programme qui fonctionne sous windows fonctionnera sous linux. »

:d) ça dépend. Normalement, oui.
Quand ton co-projet ajoute du code reposant sur des appels systèmes Windows, non. </vecu>
Évidemment, comme le dit Raspberry-Pi, si tu codes proprement et qui tu ne fais pas de choses trop liées au système, ton code sera portable.

« je voudrais savoir si un programme fait en java tournera sur toutes les plateformes qui prennent java en charge. »
:d) ça n'est pas la même question que la précédente. L'implantation de la JVM (une implantation par machine cible) est très inégales :
1/ toutes les fonctionnalités du langage Java et de sa librairie standard ne sont pas forcément implantées pour diverses raisons (impossibilité matériel, trop compliqué, inutile, pas le temps, etc.)
2/ certaines fonctionnalités sont floues, et donc peuvent être implantées différemment suivant la cible. Ceci peut (même si c'est objectivement pas de bol) faire qu'un programme qui marche sur une machine ne marchera pas sur une autre machine.

« Aussi d'après ce que je sais, en c++ il y a la fonction system() » :d) non, tu ne l'as pas vu. Et d'ailleurs, ça n'existe pas </nihilisme>
cf https://www.jeuxvideo.com/forums/1-47-46404-57-0-1-0-printf-blabla.htm#message_66500 sur le "pourquoi utiliser system() c'est le mal absolu".
Pour les gens non familiers avec Linux, j'ai "juste" réussi à faire lancer mon propre programme (qui aurait très bien pu être un virus) à cause d'un "system" dans le code original.

godrik
godrik
Niveau 30
17 août 2012 à 18:29:19

Il y a beaucoup de chose qui peuvent rendre un programme non portable meme si il est ecrit en java. L'exemple le plus courant concerne le nommage des fichiers. Sous windows, les fichiers "foo.txt" et "FOO.TXT" sont les memes. Sous linux ils ne le sont pas.

Si ton application java depend d'une lib propre a un systeme tu es mort. Genre si tu depend de directX, ton application ne marchera pas sous linux. Si tu depend d'opengl, tu va te retrouve avec les problemes de edrivers inegaux. Les lectures de videos dependent de codec place dans le systeme d'exploitation, ils limitent la portabilite...

Toutes ces choses la reduisent la portabilite des applications Java. Note que les memes problemes existent avec tous les langages.

Et un troll pour terminer: note egalement que les problemes de portabilite du C++ sont exactement les memes. Si tu ecris pour un compilateur unique (ce qui est exactement ce que java fait en imposant la JVM de sun) et que tu n'ajoutes pas de dependance a un systeme ou architecture (utilise des types de taille connue, pas de int, mais un int32). Alors tous les problemes de portabilite d'application C++ que tu aura sont de sproblemes de dependance externe.

_skip
_skip
Niveau 10
17 août 2012 à 19:38:13

Ecrire une application en java qui ne soit pas portable, c'est plus l'exception que la règle. En 7 ans de java la seule fois où je n'ai pas pu rendre le produit portable, c'était à cause du port série. Enfin cela a juste nécessité de livrer une librairie différente suivant les OS.

Il y a quelques feintes sur le système de fichier (les séparateurs de répertoire, la case sensitivity qui peut surprendre peut être) mais pour le reste tu es tranquille.

Donc en gros c'est quand même très portable. Après si tu dois dépendre de librairies natives, ben obligatoirement ta portabilité dépendra de celle des dites librairies.

lokilok
lokilok
Niveau 16
26 août 2012 à 20:16:33

D'accord, merci bien.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment