Projet JAVA(encore un)
Répondre à la discussion
Page 1 sur 2 1 DernièreDernière
Affichage des résultats 1 à 30 sur 57

Projet JAVA(encore un)



  1. #1
    ABN84

    Arrow Projet JAVA(encore un)


    ------

    bonjour,
    j'ai un texte de cette forme:
     Cliquez pour afficher

    les valeurs de mesures pouvant tres facilement jusqu'à 30000 mesures et donc 30000 lignes.
    de ce texte je dois recuperer le "Sampling rate" et le "Range", jusque là pas de problemes, mais je dois aussi manipuler ces eventuelles 30000 valeurs pour en determiner la valeur max, min, moy, et efficace.
    d'habitude pour utiliser un fichier texte, j'utilise:
    Code:
    try{
    			InputStream ips=new FileInputStream("report.kys"); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			while ((line=br.readLine())!=null){
    				maVariableString+=line+"\n";
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
                            JOptionPane.showMessageDialog(null,"impossible to read");
    		}
    ce qui me permet de recuperer le contenu du texte en entier dans une String.
    le primier probleme qui se pose à moi c'est comment recuperer ces 30000 valeurs independemment dans des strings pour les changer en suite en doubles, et comment les gerer, il y en a quand meme 30000? je me vois mal nommer mes string une à une
    les autres questions:
    comment trouver dans tout ce fouilli(il s'ajit de doubles à present), la valeur max et la valeur min?
    comment sommer toutes ces valeurs et les diviser par le nbr de valeurs(valeur moy)?
    comment calculer la vaeur efficace(RMS)?
    merci

    -----
    "Engineering is the art of making what you want from what you get"

  2. #2
    ABN84

    Re : Projet JAVA(encore un)

    PS:
    apres tout ceci, je dois reecrire le fichier avec toutes ces infos en plus (pas de probleme sur ce point), mais cette fois, devant chaque valeur de mesure doit apparaitre le temps, Aïe! encore 30000 variables à manipuler. le pas de temps se determine à partir de "Sampling Rate" (l'un est l'inverse de l'autre). et d'une ligne à une autre on ajoute un pas.
    PPS:
    http://forums.futura-sciences.com/thread158329.html : c'est lié
    "Engineering is the art of making what you want from what you get"

  3. #3
    Calvert

    Re : Projet JAVA(encore un)

    Salut!

    Je ne programme pas en Java, je ne peux donc pas t'aider brutalement. Cependant, ce que je ferais:

    Pourquoi lis-tu ton fichier dans une string et pas directement dans de double?
    Le plus simple pour manipuler un grand nombre de données semblables est à mon avis un tableau.
    En lisant les lignes du fichier, tu pourquoi ne pas avoir quelque chose comme

    1. Initialisation de la variable somme à 0, initialisation de la variable min à 0, initialisation de la variabe max à un très grand nombre, genre 1.e50.

    2. Lecture de la première ligne de donnée.

    3. Somme = Somme + valeur lue

    4. If valeur lue > max, then max = valeur lue

    5. If valeur lue < min, then min = valeur lue

    6. etc...

    Ainsi tu as déjà le minimum, le maximum et la somme de tes données.

    Pour la moyenne, il te faut en plus compter le nombre de lignes de données (du genre, tu initialise un entier i à 0 avant la lecture, et tu l'incrémente de 1 à chaque lecture).

  4. #4
    Aneldo

    Re : Projet JAVA(encore un)

    Salut Einstein,

    Il ne faut pas faire une String de toutes les valeurs de ton fichier. En effet, une String a une taille fixée à la création et lorsque tu fais
    Code:
     maVariableString+=line+"\n";
    cela fait une réalocation de String : java crée une nouvelle String plus grande et y copie la premiere.
    Une facon de contourner ce probleme est d'utiliser un bufferString dans lequel tu précises la taille max qu'il fera. Mais cela n'est pas la bonne solution à ton probleme.


    Pour ton probleme : je te propose d'enregistrer les valeurs directement dans une liste de double et lors de l'enregistrement de trouver min, max (de la façon propsée par Calvert), valeur moyenne (somme des valeurs), RMS.

    Code:
    try{
       InputStream ips=new FileInputStream("report.kys"); 
       InputStreamReader ipsr=new InputStreamReader(ips);
       BufferedReader br=new BufferedReader(ipsr);
    
       //lecture des 3 premieres ligne inutiles (pas propore!!!)
       br.readLine();
       br.readLine();
       br.readLine();
    
       List values = new ArrayList();
    
       Double currentValue;
       while ((line=br.readLine())!=null){
          currentValue = Double.parseDouble( line )
          //enregistrement de la valeur lue
          values.add( currentValue );
    
          //traitement : calcul min, max, moy, rms (autant le faire la : cela evitera de reparcourir la liste)
       }
    
       br.close(); 
    }		
    catch (Exception e){
       JOptionPane.showMessageDialog(null,"impossible to read");
    }
    values contiendra toutes les valeurs lues (dan une liste) et là, pas de malloc, realloc!
    currentValue; contiendra la valeur (en double) de la ligne en cours de lecture : de cette façon, il n'y a pas de nouvelle instanciation de double dans la boucle.


    Pour réécrire le fichier, en y ajoutant le temps : pas de probleme : il suffit de lire la liste et d'ecrir dans le fichier chaque élément en y ajoutant le temps voulu dans une nouvelle ligne.

  5. A voir en vidéo sur Futura
  6. #5
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    merci à vous deux.
    pour l'instant j'ai un probleme pour recuperer les deux premieres lignes.
    j'ai deux classes "English" et "Browser"la classe "English contient un certain nombre de jTextFields et un jButton. le jButton ouvre "Browser qui contient un jFileChooser".
    avec ce jFileChooser me permettrait de chercher un fichier, d'en faire une copie à la racine de C:, puis l'utiliser: recuperer la premiere ligne et l'ecrire dans "English.jTextField1", la deuxieme dans "English.jTextField2", les autres viendront par la suite.
    voici ce que j'ai fait:
    Code:
        private void jFileChooser1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
            if(evt.getActionCommand()=="CancelSelection")
                this.setVisible(false);
            if(evt.getActionCommand()=="ApproveSelection")
            {
                    file = this.jFileChooser1.getSelectedFile();
            }
    try{
    			InputStream ips=new FileInputStream(file); 
    			InputStreamReader ipsr=new InputStreamReader(ips);
    			BufferedReader br=new BufferedReader(ipsr);
    			while ((line=br.readLine())!=null){
    				fc+=line+"\n";
    			}
    			br.close(); 
    		}		
    		catch (Exception e){
                            JOptionPane.showMessageDialog(null,"impossible to read");
    		}
    try {
                FileWriter fw = new FileWriter("C:\\initial file.kys");
                fw.write(fc);
                fw.flush();
                fw.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }
    try{
       InputStream ips=new FileInputStream("C:\\initial file.kys"); 
       InputStreamReader ipsr=new InputStreamReader(ips);
       BufferedReader br=new BufferedReader(ipsr);
    
       //lecture des 3 premieres ligne inutiles (pas propore!!!)
       br.readLine();
       br.readLine();
       br.readLine();
    
       //List values = new ArrayList();
    
       Double currentValue;
       while ((line=br.readLine())!=null){
          currentValue = Double.parseDouble( line );
          //enregistrement de la valeur lue
          //values.add( currentValue );
    
          //traitement : calcul min, max, moy, rms (autant le faire la : cela evitera de reparcourir la liste)
       }
    
       br.close(); 
    }		
    catch (Exception e){
       JOptionPane.showMessageDialog(null,"impossible to read");
    }
     
           jTextField1.setText(nr);       
        }
    le probleme, est que netbeans m'indique une erreur de "static" pourtant j'ai declaré "jTextField1" en "public static", j'ai aussi essayé d'enlevé le static de la fonction main, rien n'y fait.
    PS: bien que le fichier est bien reecrit au bon endroit, j'ai un message "impossible to read"
    Dernière modification par ABN84 ; 30/07/2007 à 17h19.
    "Engineering is the art of making what you want from what you get"

  7. #6
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    j'ai "resolu" les problemes precedemment enancés. le programme fonctionne mais en essayant d'ouvrir le fichier j'ai message d'erreur "impossioble to read". qqun peut il m'aaider à trouver l'erreur?
    merci.
    Code:
    private void jFileChooser1ActionPerformed(java.awt.event.ActionEvent evt) {                                              
            if(evt.getActionCommand()=="CancelSelection")
                this.setVisible(false);
            if(evt.getActionCommand()=="ApproveSelection")
            {
                    file = this.jFileChooser1.getSelectedFile();
            }
    try {
    copyFile(file, new File ("C:\\initial file.kis"));
    }
    catch(IOException e) {
    JOptionPane.showMessageDialog(null,"impossible to write");
    }
    try{
       InputStream ips=new FileInputStream("C:\\initial file.kis"); 
       InputStreamReader ipsr=new InputStreamReader(ips);
       BufferedReader br=new BufferedReader(ipsr);
    
       //lecture des 3 premieres ligne inutiles (pas propore!!!)
       l1=br.readLine();
       l2=br.readLine();
       br.readLine();
    
       sr=Double.parseDouble(l2.substring(15,l2.length()-2));
       nr=Double.parseDouble(l1.substring(8,l1.length()-1));
       ts=1/sr;
       English.sr=sr;
       English.nr=nr;
       English.ts=ts;
      
       while ((line=br.readLine())!=null){
          value[i]=Double.parseDouble( line );
          i+=1;
          if(value[i]>=max){
            max=value[i];
          }else max=max;
          if(value[i]<=min){
            min=value[i];
          }else min=min;
          S+=value[i];
          rms2+=(value[i]*value[i]);
          t[i]=i*ts;
          nl+=Double.toString(value[i])+" "+Double.toString(t[i])+"\n";
          English.value[i]=value[i];
          English.t[i]=t[i];
       }
       mid=S/i;
       rms=Math.pow(rms2/i,0.5);
       br.close(); 
       
    }		
    catch (Exception e){
       JOptionPane.showMessageDialog(null,"impossible to read");
    }
    English.max=max;
    English.min=min;
    English.mid=mid;
    English.S=S;
    English.rms=rms;
    English.i=i;
    English.jTextField5.setText(Double.toString(sr));
    English.jTextField6.setText(Double.toString(nr));
    English.jTextField7.setText(Double.toString(max));
    English.jTextField8.setText(Double.toString(min));
    English.jTextField9.setText(Double.toString(mid));
    English.jTextField10.setText(Double.toString(rms));
        }
    PS: la methode "copyfile" revoie à cette classe:
    Code:
    public static void copyFile(File src, File dest) throws IOException
    {   FileInputStream fis = new FileInputStream(src);
         FileOutputStream fos = new FileOutputStream(dest);
    
         java.nio.channels.FileChannel channelSrc   = fis.getChannel();
         java.nio.channels.FileChannel channelDest = fos.getChannel();
    
         channelSrc.transferTo(0, channelSrc.size() , channelDest);
    
         fis.close();
         fos.close();
    }
    "Engineering is the art of making what you want from what you get"

  8. #7
    ABN84

    Re : Projet JAVA(encore un)

    remoi,
    je crois que le probleme(s'il n'y en a qu'un) vient du fait que le separateur des decimales est une virgule et non un point. comment pourrais je, lors de la copie du fichier, changer toutes les virgules en points?
    merci
    "Engineering is the art of making what you want from what you get"

  9. #8
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    j'ai resolu le probleme de virgule.
    j'ai un probleme avec ces lignes:
    while ((line2=br.readLine())!=null){
    i+=1;
    //value[i]=Double.parseDouble( line2 );
    /*if(value[i]>=max){
    max=value[i];
    }else max=max;
    if(value[i]<=min){
    min=value[i];
    }else min=min;
    S+=value[i];
    rms2+=(value[i]*value[i]);
    t[i]=i*ts;
    nl+=Double.toString(value[i])+" "+Double.toString(t[i])+"\n";
    English.value[i]=value[i];
    English.t[i]=t[i];*/
    }
    mid=S/i;
    rms=Math.pow(rms2/i,0.5);
    br.close();
    si j'active la ligne en rouge, ça me donne une erreur.
    "Engineering is the art of making what you want from what you get"

  10. #9
    invite24357dd0

    Re : Projet JAVA(encore un)

    Bonsoir,

    (Entre parenthèses, il est toujours intéressant de savoir quelle erreur a été générée pour pouvoir aider plus facilement).

    Ici, comment initialises-tu le tableau "value" ? Est-ce bien un tableau de doubles ? Si c'est bien le cas, tu pourrais copier l'erreur (pas nécessairement toute la liste des classes conflictuelles mais au moins le début).

  11. #10
    ABN84

    Re : Projet JAVA(encore un)

    bonsoir
    Citation Envoyé par jepoirrier Voir le message
    Bonsoir,

    (Entre parenthèses, il est toujours intéressant de savoir quelle erreur a été générée pour pouvoir aider plus facilement).
    il ne s'ajit pas d'erreur de compilation.
    tout ce fouilli de codes etant dans un try catch, lorsque j'appuie sur ouvrir j'ai droit à un "impossible to read"
    Code:
    catch (Exception e){
       JOptionPane.showMessageDialog(null,"impossible to read");
    }
    Ici, comment initialises-tu le tableau "value" ? Est-ce bien un tableau de doubles ?
    Code:
    double[] value,t;
    Si c'est bien le cas, tu pourrais copier l'erreur (pas nécessairement toute la liste des classes conflictuelles mais au moins le début).
    etant donné que l'erreur est "impossible to read" et non "impossible to write", j'en conclue que le premier try catch ne pose aucun probleme.
    lorsque je met tout ce qui est à l'interieur du while en commentaire, je n'ai pas cette erreur.
    si je remet la ligne concernant i, pas de probleme. ça se gate quand je remet la ligne contenant value[].
    "Engineering is the art of making what you want from what you get"

  12. #11
    invite24357dd0

    Re : Projet JAVA(encore un)

    Bonsoir,

    Ok, tu as une erreur à l'exécution et pas à la compilation, j'avais mal compris.

    La première chose que je dirais de faire, dans ton 2ème try/catch, c'est d'imprimer la pile d'erreur (stack trace). Ainsi, tu as plus d'information sur l'origine exacte de ton problème (car ton try est assez long et donc des erreurs peuvent arriver plus fréquemment, voir ci-dessous). Ton code de catch devient :
    Code:
    catch (Exception e){
       JOptionPane.showMessageDialog(null,"impossible to read");
       e.printStackTrace();
    }
    Ensuite, voici quelques questions (parfois triviales mais on n'a pas tout le code) :

    - ligne "value[i]=Double.parseDouble( line );" : je suppose que tu as initialisé quelque part ta variable i (probablement à 0). Si tu as juste écrit "int i;" le programme ne connait pas la valeur de i et ne peut donc pas atteindre la cellule voulue.

    - même ligne : as-tu défini la taille de ton tableau value ? Tu as dit que tu avais bien écrit "double[] value,t;" mais as-tu défini "value = new double[TAILLEMAX];" ? Si tu ne sais pas à l'avance la taille maximale de ton tableau, tu as 2 solutions. La solution la plus moche est de parcourir une fois ton fichier pour en connaître le nombre de ligne et ensuite créer ton tableau avec ce nombre de lignes (-3 dans ton cas) et re-parcourir le fichier. L'autre solution, plus élégante, a déjà été citée plus haut : tu utilises une ArrayList.

    N.B. : idem pour le tableau t, un peu plus bas dans le try.

    - ligne "if(value[i]>=max)" : la valeur de max a déjà été initialisée ? Si le programme ne sait pas combien vaut max au début, ... (je mettrais "Double = 0;", par exemple)

    - ligne "if(value[i]<=min)" : idem pour la variable min

    - lignes "else max=max;" et "else min=min;" : pas très utiles mais ne gâchent rien

    Sinon, un conseil : nomme tes variable de JTextField (et autres éléments graphiques) par un nom évocateur. JTextField8 est très peu évocateur, surtout quand tu reliras ton code, dans 1 mois. Par contre, JTFvaleurMinimale, tu sais tout de suite que c'est un JTextField (utilise la convention que tu veux pour çà) et qu'il devrait afficher la valeur minimale.

  13. #12
    ABN84

    Re : Projet JAVA(encore un)

    bonsoir,
    je n'ai en effet pas initialisé la taille du tabeau. à present tout va pour le mieux. merci.
    "Engineering is the art of making what you want from what you get"

  14. #13
    ABN84

    Re : Projet JAVA(encore un)

    bonsoir,
    à present je voudrais afficher une courbe des valeurs de value[i] en fonction des valeurs de t[i] de la classe English dans un jPanel de la classe TDG.
    TDG est une jFrame contenant:
    - un jPanel qui permetterait d'afficher la courbe
    - un jScrollBar pour Zoomer
    - 4 jButton (1-4) le premier servirait d'enregister la courbe au format jpg sous C:\report\t.jpg, les 3 autres enregisteraient chacun un fichier jpg du Zoom courant, sous, respectivement, C:\report\g1.jpg, C:\report\g2.jpg, et C:\report\g3.jpg

    en fuinant sur internet j'ai trouver un code source d'un programme repondant à toutes les fonctionnalités que je voulais. je l'ai compilé et il fonctionne. j'ai jetté un coup d'oeuil sur le code et j'ai du mal à l'appliquer à ma Frame. qqun pourrait-il m'aides un peu svp?
    merci.

    ci-joint mon code (fait sous netbeans), le code recuperé, et un fichier txt si besoin est d'essayer le code.

    merci
    Fichiers attachés Fichiers attachés
    "Engineering is the art of making what you want from what you get"

  15. #14
    ABN84

    Re : Projet JAVA(encore un)

    PS:
    à y penser, si c'est faisable, deux Zooms independants l'un pour l'axe X l'autre pour l'axe Y, vaudraient mieux

    PPS:
    les classes principales sont English et GenApp
    Fichiers attachés Fichiers attachés
    Dernière modification par ABN84 ; 02/08/2007 à 02h21.
    "Engineering is the art of making what you want from what you get"

  16. #15
    Stan_94

    Re : Projet JAVA(encore un)

    J'ai téléchargé les sources que j'étuderai ASAP !

    A+

  17. #16
    Stan_94

    Re : Projet JAVA(encore un)

    Bon, j'ai lancer ton application (trés joli tout ça ) et j'ai bien l'écran pour affichage du graphique, mais sans rien... Donc tu n'as pas encore implementer la logique qui trace le graphe...
    Il faut que tu surcharges la méthode paint du composant JFrame afin d'y include ton code... Dans tes fichiers qui ton servis de base, c'est la méthode paintComponent de la class GenPan qui fait ce boulot. Elle est appelée par la méthode dessiner de la classe GenInt...

    N'hésites pas si tu as d'autres questions...

    Et penses à renommer le composant avec de noms plus évocateur que les noms par défaut !!!

  18. #17
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    je viens par hazards de trouver que F11 compile mon projet en JAR.
    j'en ai obtenu un JAR executable contenant tout ce qui etait compris dans le dossier src et un dossier lib contenant les JAR biblio.
    lors de l'execution directe sur netbeans, un dossier de src etait accessible en lecture et en ecriture, mais compilé en jar, il devient inaccessible en ecriture. comment suis je faire pour que, compilé, j'obtienne, le jar, le dossier lib et mon dossier en question?
    voici les lignes qui font prbleme:
    copyFile(new File("src\\report\\report.html"), new File (target+"\\report.html"));
    copyFile(new File("src\\t.jpg"), new File ("src\\report\\t.jpg"));
    ou dois je mettre mon dossier report, pour qu'à la compilation il ne soit pas à l'interieur du jar? ou avez vous une autre sol?
    "Engineering is the art of making what you want from what you get"

  19. #18
    ABN84

    Re : Projet JAVA(encore un)

    resolu de la facon suivante:
    try{
    URL upurl = this.getClass().getResource("/up.jpg");
    BufferedImage upi = null;
    try{
    upi = ImageIO.read( upurl );
    }catch ( IOException e ){
    }
    ImageIO.write( upi, "jpg", new File ( "C:\\TEMP\\report\\up.jpg" ));
    } catch (IOException ex) {
    ex.printStackTrace();
    }
    "Engineering is the art of making what you want from what you get"

  20. #19
    ABN84

    Re : Projet JAVA(encore un)

    bonsoir,
    pour l'affichage de la courbe j'ai utilisé la biblio jfreechart.
    je n'ai pas compris comment faire le zoom avec jfreechart (la fct zoom y est integrée).
    j'ai fais le zoom avec deux jscrollbar qui definissent les dimensions du bufferedimage. j'ai un probleme avec ce zoom. executez ce programme, lancez "Time domain" et zoomez avec les deux jscrollbar qui y sont et vous saurez de quoi je parle. qqun pourrait-il me venir en aide svp.
    pour capturer les graphiques en fichiers jpg j'utilise:
    Code:
    BufferedImage image = new BufferedImage(540,240,BufferedImage.TYPE_INT_RGB);
    
    jScrollPane2.paint(image.getGraphics());
    
    try {
    (new File("C:\\TEMP\\report\\t.jpg")).createNewFile();
    DataOutputStream sortie = new DataOutputStream(new FileOutputStream("C:\\TEMP\\report\\t.jpg"));
    JPEGImageEncoder enc = JPEGCodec.createJPEGEncoder(sortie);
    enc.encode(image);
    sortie.close();
    
    }
    catch (IOException ioe) {
    ioe.printStackTrace();
    }
    ca ne pose pas de porbleme tant que le graphe est à l'echelle 1. mais en zoomant j'obtiens des dimensions grotesques. comment faire pour ne garder que la partie visible du jscrollpane?
    si qqun sait comment zoomer avec jfreechart, je prefererais.
    merci
    Fichiers attachés Fichiers attachés
    "Engineering is the art of making what you want from what you get"

  21. #20
    ABN84

    Re : Projet JAVA(encore un)

    j'obtiens cette erreur avec le zoom:
    Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
    "Engineering is the art of making what you want from what you get"

  22. #21
    invite914a6080

    Re : Projet JAVA(encore un)

    Salut!
    désolé je lis pas tout les morceaux de code qui sont craché ici, mais je vais essayé de te donner la solution à ton problème.

    Grosso modo, tu essais de lire tout ton fichier d'un coup d'un seul, pour ca tu le découpe en ligne, puis tu stockes toute ces lignes dans une même String. Le problème est que tu obtiens un objet difficile à manipuler.

    Le OutOfMemory signifie que tu as cramé toute la mémoire qui était disponible, tu as une String qui arrive à saturation.

    Pour ton problème tu peux par exemple utiliser la classe vector (de java.utils.*)
    Ainsi, tu vas pouvoir stocker chaque ligne sous forme d'un vector de string dans ta boucle de lecture du fichier texte.
    Ensuite pour obtenir des doubles, je fais ca :
    double f=(double)(Double.parseDouble( "1000"));

    Remarque :
    Pour savoir comment la classe vector fonctionne, va voire la javadoc :
    http://java.sun.com/j2se/1.5.0/docs/api/

    tu auras à déclarer ton vector
    Vector<String> lignes=new Vector<String>();

    Pour ajouter un élement :
    lignes.add(ligneFichier);
    Pour lire un élement :
    String lu = lignes.elementAt(15);
    Pour compter le nombre d'éléments:
    int nombre_de_ligne=lignes.size();

    Bonne continuation
    ++

  23. #22
    ABN84

    Re : Projet JAVA(encore un)

    merci bretus, mais je ne vois pas vraiment comment faire.
    la ligne qui fait probleme est celle ci:
    BufferedImage image = chart.createBufferedImage(hor, ver);
    hor et ver sont des integers, hor estun multiple de 540, ver est un multiple de 225.
    le probleme de memoire dès que hor atteint 5400 et ver 1125.
    je mais pas vraiment compris comment changer ces int en vector et comment l'utiliser par la suite.
    "Engineering is the art of making what you want from what you get"

  24. #23
    invite914a6080

    Re : Projet JAVA(encore un)

    Salut désolé j'étais resté sur le problème initial.
    Vector te sert à rien dans ce cas.

    En fait, je pense que tu arrives à saturation de mémoire pour une BufferedImage (buffer = pile, la machine java doit limiter la taille que peut prendre une image en mémoire)

    Regarde, l'image que tu fabriques pèse de l'ordre de 15Mo en mémoire, 5 000 000 de pixel, trois canaux en INT_RGB (256 couleurs) => 3 octets par pixel.

    Trouve le moyen de charger des images lourdes sous java, tu auras peut être à limiter ta résolution où à mieu utiliser la mémoire.
    Regarde si rien ne traine la dessus sur les sites javafr et java.developpez, en principe j'y trouve mon bonheur sous forme d'exemple ou de tutos.

    Bonne continuation (mais OutOfMemory = tu as saturé la mémoire, ou du moins tu tombes sur une limite)

    Rq : je crois que bien souvent, pour traiter des images vraiment lourde(genre 300Mo), on a meilleur temps de passer par le C, quitte à faire communiquer une appli java et un exe écrit en C...

    NOTA BENE : Tu utilises à travers BufferedImage la classe image de java.awt.* (destinée aux interfaces graphiques), donc aux images qui vont être afficher à l'écran, ce ne serait donc pas étonnant que la machine java t'envois bouler parceque le mode de gestion de la mémoire correspond pas à ton problème...)

  25. #24
    ABN84

    Re : Projet JAVA(encore un)

    bonsoir,
    la solution à tous les probleme est l'utilisation de l'objet "ChartPanel", la methode zoom y est integrée, ne consomme pas beancoups de memoire et le rendu est plus propre.
    je me suis inspiré de ce code qui permet d'afficher des valeurs en fct du temps:
     Cliquez pour afficher

    moi j'ai plutot besoin d'afficher des valeurs Y en fct de x.
    la logique de jfreechart est la suivante:
    on enregiste les données dans l'objet "series", du "series" on cree un "dataset", du "dataset" un "chart, et du chart eventuellement un "chartpanel" qu'on peut integrer dans un jpanel.
    nos deux codes different jusqu'à la creation du dataset mais apres, il n'y a pas de raison pour qu'ils soient differents.
    voici ce que j'ai fait:
     Cliquez pour afficher

    le programe se compile sans probleme, mais en lancant la frame, je vois jPanel2 mais je ne vois pas chartpanel.
    du fait que j'utilise netbeans au debut de la creation de la jframe, il y a la methode "initcomponent()" qui cree tous les elements graphiques Swing. helas chartpanel doit etre créé manuellement. je soupsonne un conflit au tour de chartpanel et jpanel2, entre le code généré par netbeans et mon code.
    comment resoudre ce probleme svp?
    merci
    PS: copiez le premier code dans fichier txt et renommez le en java, il se fonctionnera sans faute.
    PPS: par la meme occasion qqun pourrait il repondre à ces deux questions svp:
    http://forums.futura-sciences.com/po...7.html#1228658
    merci
    "Engineering is the art of making what you want from what you get"

  26. #25
    ABN84

    Re : Projet JAVA(encore un)

    PPPS: pour que ça marche, il faut integrer jfreechart.jar et jcommon.jar dans le classpath:
    http://sourceforge.net/project/downl...se_mirror=mesh
    "Engineering is the art of making what you want from what you get"

  27. #26
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    il s'ajissait bien d'un conflit entre le code netbeans et le code tapé.
    j'ai resolu le probleme en trouvant sur internet un JAR experimental faisant de jFreeChart un javaBeans (Orson.jar)
    je cherche tjrs la reponse à ces questions:
    http://forums.futura-sciences.com/po...7.html#1228658
    merci
    "Engineering is the art of making what you want from what you get"

  28. #27
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    je viens de terminer mon programme.
    merci à tous de m'avoir aidé.
    si ça interesse qqun, voici les biblio utilisées:
    jFreeChart
    Orson
    flanagan
    et le resultat.
    "Engineering is the art of making what you want from what you get"

  29. #28
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    rien à voir, mais je ne voulais pas ouvrir un nouveau topic rien que pour ça:
    si je veux utiliser un jLabel comme un jButton je change le en "jButton1ActionPerformed" en "jLabel1KeyPressed" c'est bien ça?
    comment fait-on pour lancer un lien hypertexte? je clique sur mon jLabel et ça lance l'explorateur par defaut et ouvre la page "www.machin.com".
    merci
    "Engineering is the art of making what you want from what you get"

  30. #29
    Aneldo

    Re : Projet JAVA(encore un)

    si je veux utiliser un jLabel comme un jButton je change le en "jButton1ActionPerformed" en "jLabel1KeyPressed" c'est bien ça?
    J'utilise l'evenement jLabelNameMouseClicked()

    comment fait-on pour lancer un lien hypertexte? je clique sur mon jLabel et ça lance l'explorateur par defaut et ouvre la page "www.machin.com".
    avec l'api jdic : https://jdic.dev.java.net/servlets/ProjectDocumentList
    Il suffit de faire :
    Code:
    Desktop.browse(new URL("www.machin.com"));

  31. #30
    ABN84

    Re : Projet JAVA(encore un)

    bonjour,
    avec cette forme "Desktop.browse(new URL("www.machin.com"));"
    ça m'indique une erreur disant que browse s'applique à URI et non à URL.
    "Engineering is the art of making what you want from what you get"

Page 1 sur 2 1 DernièreDernière

Discussions similaires

  1. Relativité encore et encore ... avec un petit peu de math
    Par inviteecab0875 dans le forum Physique
    Réponses: 9
    Dernier message: 16/01/2006, 08h59
  2. Encore une questions pour les pros du LaTeX...et du JAVA
    Par invite37f4960c dans le forum Logiciel - Software - Open Source
    Réponses: 7
    Dernier message: 09/01/2006, 13h37
  3. Brandt Premia C100 qui disjoncte encore et encore.
    Par invite3df77411 dans le forum Dépannage
    Réponses: 22
    Dernier message: 07/01/2006, 15h16
Découvrez nos comparatifs produits sur l'informatique et les technologies.