IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

[débutant] java portabilité de PC vers MAC


Sujet :

Langage Java

  1. #1
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut [débutant] java portabilité de PC vers MAC
    bonjour

    je débute dans le dev java, j'ai réalisé un petit appli (applet) en java sous XP avec comme version de java installée sur ma machine.

    java version "1.6.0_03"
    Java(TM) SE Runtime Environment (build 1.6.0_03-b05)
    Java HotSpot(TM) Client VM (build 1.6.0_03-b05, mixed mode, sharing)

    javac 1.6.0_03
    cela fonctionne correctement, cependant il est destiné à des MAC, des machines d'ancienne génération MAX OX 9.1 (je sais ....)
    après de nombreuses recherches sur le forum, j'ai compris d'apple avait fait son propre package java à partir de la version 1.4 ou bien 1.5.
    j'ai donc modifie la compilation en fonction

    javac -target 1.4 -source 1.4 Deplacer.java
    il fonctionne toujours correctement sous XP mais toujours pas sous MAC même avec MAC OS X (génération plus récente)

    étant un inculte en MAC, je demande votre aide, car ce dev est pour l'école de mon fils, un truc tout simple pour l'instant.

    Merci de votre aide

    JP

    PS : si je me suis trompé de branche du forum, désolé ...

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 118
    Points
    118
    Par défaut
    Bonjour,

    Peux-tu nous donner plus de précisions sur ce qui ne marche pas ? (message d'erreur, ...)

    Concernant les flags utilisés sur la ligne de commande, ils ne sont pas forcément suffisants :
    -source 1.4 : permet de s'assurer que le code source respecte les règles Java 1.4 (c'est à dire, pas ce qui a été ajouté après: generics, ...)
    -target 1.4 : les fichiers .class peuvent fonctionner avec une JVM 1.4
    Par contre, si tu utilises des nouvelles classes / méthodes apparues après la 1.4, çà ne marchera toujours pas à l'exécution.

    Eventuellement, installe un JDK 1.4 sous XP pour compiler et tester, tu y verras peut-être plus clair.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,

    L'option -source 1.4 force le compilateur à vérifier que le code source est conforme à Java 1.4 (pas d'enum, de generics, etc.)
    L'option -target 1.4 indique au compilateur qu'il doit générer un bytecode compatible avec les machines virtuelles 1.4

    Mais les appels aux nouvelles classes/méthodes de Java 5/6 ne seront pas bloqué....


    Pour compiler un programme Java qui fonctionne avec du Java 1.4, le plus simple est d'utiliser un compilateur 1.4, car sinon il faut spécifier l'emplacement des classes de l'API 1.4 (via -bootclasspath).

    a++

    [edi] grillé

  4. #4
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    bonjour,

    cela ne fonctionne pas sous mac, c'est à dire rien ne se passe.
    je lance un navigateur et là rien.
    je le lance de 2 manieres differentes sous XP
    soit dans une page web
    <applet code= "Deplacer.class" name="AppletTest">
    soit en ligne de commande dans un batch
    java Deplacer
    pour cette deniere ne n'est pas pu le test comme je ne sais pas le faire sous MAC en ligne de commande

    RQ si quelqu'un sait faire, je suis preneur !

    Cà doit ouvrir une autre fenetre.

    je vais recupere le JDK 1.4, mais pour la JVM, je reste en 1.6 ???

    Merci pour votre aide

    jp

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2006
    Messages
    108
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 108
    Points : 118
    Points
    118
    Par défaut
    Il faut que tu compiles avec le JDK / JVM 1.4, tu verras déjà si tu as des messages d'erreur (par exemple, si tu utilises des classes / méthodes qui n'existaient pas en 1.4)

    Pour le lancement sous Mac, je ne connais, il faudrait que tu trouves comment voir la console pour avoir les messages d'erreur (soit afficher la console quand tu lances ton navigateur, soit lancement en ligne de commande). C'est vraiment la première étape pour diagnostiquer un problème.

  6. #6
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    RE,

    apres de nombreuse recherches sur le net, j'ai trouvé plusieurs informations.

    Pour les "Vieux" MAC en OS 9.1, je doit les mettre a jour avec
    Mac OS Runtime for Java 2.2.5 cf : http://docs.info.apple.com/article.html?artnum=75097

    il est basé sur le Java 1.1.8
    j'ai donc recupéré les version JRE 1.1.8 et JDK 1.1.8 chez java
    http://java.sun.com/products/archive/

    je vais essayer çà

    Merci

    JP

  7. #7
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    re,

    j'ai fini mon applet sous java 1.4, il fonctionne correctement,
    j'installe 1.1.8, la plus rien ne compile

    pb d'import
    pb de class Jlabel, JTextField, JFrame

    bref, je suis bon pour tout recommencer

    si quelqu'un peut m'aider en 1.1.8, je serais content

    merci

    JP

  8. #8
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 524
    Points
    524
    Par défaut Tester la Version jdk du browser
    Bonjour,
    la 1.1.8 me semble un sacré régression quand même: il n'y a pas de swing, et donc pas toutes les classes J....
    De nos jours un jdk1.4 (1.3 à la limite) me semble un minimum. ça devrais pouvoir se trouver sur Mac?

    Quand tu installe ta jvm sur mac, fait en sorte qu'elle soit bien utilisée par le browser, tu peux tester la version avec cette applet:
    http://www.javatester.org/version.html

  9. #9
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    re,

    j'ai pas le choix, le mac tourne sous OS 9.2.2
    j'ai mis à jour java avec MRJ 2.2.6, soit 1.1.8
    mac fait a bien des package java avec 1.4 ou bien 1.5
    mais uniquement utilisable avec MAC OS X
    j'ai pas trouvé comme metre une version de java plus recente
    si quelqu"un sait, je suis preneur.
    le passage de 1.4 à 1.1.8 est vraiement galere !

    question si je compile en 1.4 avec la ligne de commande

    Javac xxxx.java -target 1.1
    cela peut-il fonctionner ?

    merci pour votre aide

    JP

  10. #10
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 524
    Points
    524
    Par défaut
    C'est la compatbilité du pcode, pas des classes manquantes.

    il y a a p-e moyen d'ajouter les classes swing en ajoutant une librairie:
    http://java.sun.com/products/jfc/download.html#1.1

    mais pour coder en 1.1, le mieux est de compiler avec ta jdk1.1.

    Tu sera peut-être obligé de compiler en ligne de commande ou d'utiliser un vieil eclipse car les derniers ne prennent plus en charge la syntaxe 1.1.

    ça veut quand même dire: plus de inner classe, plus d'anonymous classes, plus de méthodes 1.3 et 1.4 sur les types java (String.split entre autres)

  11. #11
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    re,

    je compile deja en ligne de commande

    il y a a p-e moyen d'ajouter les classes swing en ajoutant une librairie:
    http://java.sun.com/products/jfc/download.html#1.1
    merci pour l'info, je regarde çà

    JP

  12. #12
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    re,

    j'ai recuperé les sources, mais j'arrive pas à les utiliser

    comment faire ?

    merci

    jp

  13. #13
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    re,

    c'est bon çà compile en ligne de commande

    javac -classpath C:\java\Swing-1.1.1\swing.jar;C:\java\jdk1.1.8\lib\classes.zip Deplacer.java
    cependant j'utilisais une fonction de transformation Path en URL ( merci le forum)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public int GetTypeOSName()
            {
                    String Name = System.getProperty ("os.name");
                    System.out.println(Name);
     
                    int iType = -1 ;
     
                    if ( Name.indexOf("Win") != -1)
                    {
                            iType = 0 ;
                    }
                    else if ( Name.indexOf("Os") != -1)
                    {
                            iType = 1 ;
                    }
     
                    return iType ;
            }
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
     
    public String GetCurrentRep()
            {
                    String path = getClass().getName() + ".class";
                    URL url = getClass().getResource(path);
     
                    try
                    {
                            path = URLDecoder.decode(url.toString(), "UTF-8");
                    }
                    catch(Exception e)
    		{
                            e.printStackTrace();
                            DisplayMsgBox("PATH -> FAILED", "ERROR", 1);
                            return "" ;
                    }
     
                    // suppression de  la classe ou du jar du path de l'url
                    int index = path.lastIndexOf("/");
                    path = path.substring(0, index);
     
                    if (path.startsWith("jar:file:"))
                    {
                            // suppression de jar:file: de l'url d'un jar
                            // ainsi que du path de la classe dans le jar
                            index = path.indexOf("!");
     
                            if (GetTypeOSName() == 0)
                            {
                                    path = path.substring(10, index);
                            }
                            else if (GetTypeOSName() == 1)
                            {
                                    path = path.substring(9, index);
                            }
     
                            index = path.indexOf(getClass().getName()) ;
                            path = path.substring(0, index-1);
                    }
                    else
                    {
                            // suppresion du file: de l'url si c'est une classe en dehors d'un jar
                            // et suppression du path du package si il est prsent.
                            if (GetTypeOSName() == 0)
                            {
                                    path = path.substring(6, path.length());
                            }
                            else if (GetTypeOSName() == 1)
                            {
                                    path = path.substring(5, path.length());
                            }
     
                            Package pack = getClass().getPackage();
                            if (null != pack)
                            {
                                    String packPath = pack.toString().replace('.', '/');
                                    if (path.endsWith(packPath))
                                    {
                                                    path = path.substring(0, (path.length() - packPath.length()));
                                    }
                            }
                    }
     
                    if (GetTypeOSName() == 0)
                    {
                            path = path.replace('/', '\\');
                    }
     
                    System.out.println(path);
     
                    return path ;
            }
    comme le java 1.1 ne connais pas URLDecoder.decode

    le l'ai transformé en

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    public String GetCurrentRep()
            {
                    String path = getClass().getName() + ".class";
                    URL url = getClass().getResource(path);
     
                    path = url.toString();
     
    		// suppression de  la classe ou du jar du path de l'url
                    int index = path.lastIndexOf("/");
                    path = path.substring(0, index);
     
                    if (path.startsWith("jar:file:"))
                    {
                            // suppression de jar:file: de l'url d'un jar
                            // ainsi que du path de la classe dans le jar
                            index = path.indexOf("!");
     
                            if (GetTypeOSName() == 0)
                            {
                                    path = path.substring(10, index);
                            }
                            else if (GetTypeOSName() == 1)
                            {
                                    path = path.substring(9, index);
                            }
     
                            index = path.indexOf(getClass().getName()) ;
                            path = path.substring(0, index-1);
                    }
                    else
                    {
                            // suppresion du file: de l'url si c'est une classe en dehors d'un jar
                            // et suppression du path du package si il est prsent.
                            if (GetTypeOSName() == 0)
                            {
                                    path = path.substring(6, path.length());
                            }
                            else if (GetTypeOSName() == 1)
                            {
                                    path = path.substring(5, path.length());
                            }
                    }
     
    		if (GetTypeOSName() == 0)
                    {
                            path = path.replace('/', '\\');
                    }
     
                    return path ;
            }
    pour le chargement des images cela fonctionne pas de souci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    img = new ImageIcon(CurrentRep+"\\ImagesSystem\\exit.png");
    imagesSystem etant un sous repertoire du repertoire conteant le jar

    cepedant pour les fichiers sons contenus dans \sons, cela ne fonctionne pas car j'utilse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String s = CurrentRep+"\\sons\\applause.wav" ;
    AudioClip audio = applet.getAudioClip(pObj.GetUrlString(s));
    avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    public URL GetUrlString(String string)
            {
    		String path = "file:\\\\\\" + string ;
    		path = path.replace('\\', '/');
     
    		URL url = null ;
     
    		try
                    {
    			url = new URL(path);
    		}
    		catch(Exception e)
    		{
                    	e.printStackTrace();
    		}
     
    		return url ;
    	}
    çà me retour par exemple :

    CurrentRep : c:\project
    path : CurrentRep+"\\sons\\applause.wav" -> c:\project\sons\applause.wav
    GetUrlString : file:/c:/project/sons/applause.wav
    le getAudioClip ne fonctionne pas

    Quelqu'un pourrait-il me dire comment avoir l'url bonne ?

    Sinon j'ai voulu essayer une autre solution, mettre les sons dans le jar
    mais j'y arrive pas, pour pouvoir les lire directement

    Merci pour votre aide

    JP

  14. #14
    Membre du Club

    Inscrit en
    Août 2002
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Août 2002
    Messages : 36
    Points : 54
    Points
    54
    Par défaut
    Re,

    j'ai enfin trouvé, il faut directement travailler sous MAC

    Installer le MRJ et MRJ SDK, et cela fonctionne

    Pour le pb de son, AudioClip n'est valable que pour un applet, dans mon cas, je construis une application, je dois utiliser AudioStream

    Merci pour votre aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Quel est le meilleur langage pour la portabilité : Windows & Linux (voire Mac) ?
    Par iubito dans le forum Débats sur le développement - Le Best Of
    Réponses: 57
    Dernier message: 26/11/2007, 23h45
  2. Problème de portabilité vers Mac OS?
    Par doudoustephane dans le forum C++Builder
    Réponses: 8
    Dernier message: 16/08/2005, 07h53
  3. [Think Pascal] Portage/conversion Think Pascal vers MAC/Windows/Linux
    Par Alain Vitry dans le forum Autres IDE
    Réponses: 1
    Dernier message: 19/03/2005, 11h24
  4. [Débutant] java.lang.object
    Par bonnefr dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 27/05/2004, 14h54
  5. [débutante][java]connection internet PPC\PC de bureau
    Par Emma20 dans le forum Développement
    Réponses: 2
    Dernier message: 19/05/2004, 14h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo