Problème Compilation JAVA [Résolu/Fermé]

Signaler
-
 Sken -
Bonjour,

J'exécute le code suivant :

String v1 = f1.getText();
int Iv1 = Integer.parseInt(v1);
t1.setText(""+ConvertRouge(Iv1)+"");

dans une classe Graphique.java et j'utilise la méthode ConvertRouge suivante :

public int ConvertRouge(int Rouge){
int C = ((255 - Rouge)*100)/255;
return C;
}

située dans une classe RGB.java dans le meme dossier.
Lorsque je compile Graphique.java j'obtiens l'erreur suivante :

Graphique.java:21: cannot find symbol
method ConvertRouge(int)

Je ne comprends pas pourquoi...

Merci pour votre aide.

6 réponses

Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Re,

Question bete: dans la classe ou tu fais appel a ConvertRouge(iv1), as tu bien mis au debut de ton fichier Graphique.java:

import RGB.java ? :)
C'est pas nécessaire normalement, j'importe pas un package c'est une classe que j'ai moi-meme crée...
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Cela depends de ton fichier RGB et des visibilites de tes classes et des methodes...

Je pourrais avoir le prototype de ta classe RGB et ta fonction stp ?
import java.math.*;

public class RGB extends Couleur{

public RGB(int R,int G,int B){
super(R,G,B);
}

public void additionner(int Red,int Green,int Blue){
if ((Red<0 || Green <0 || Blue<0) || (Red>(255-x) || Green>(255-y) || Blue >(255-y))){
System.out.println("coucou le bug");
}
else{
x+=Red;
y+= Green;
z+=Blue;
}
}

public double distance(RGB c){
double distance;
distance = Math.sqrt(Math.pow(this.x-c.x,2)+Math.pow(this.y-c.y,2)+Math.pow(this.z-c.z,2));
return distance;
}

public int ConvertRouge(int Rouge){
int C = ((255 - Rouge)*100)/255;
return C;
}

public void ConvertGreen(int Green){
int M = ((255 - Green)*100)/255;
}

public void ConvertBleu(int Bleu){
int Y = ((255 - Bleu)*100)/255;
}



public String toString(){
String s="La composante rouge est "+x+"\n"+"La composante verte est "+y+"\n"+"La composante Bleu est "+z+"\n";
return s;
}
}

Voilà
Messages postés
9367
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 330
Bonjour,

Il nous faudrait le code de la classe Graphique.java, et surtout la ligne 21 sur laquelle se produit l'erreur.

Et également l'erreur complète.
import java.awt.*;
import java.awt.event.*;

public class Graphique extends Frame{

private static final int LARGEUR = 800;
private static final int HAUTEUR = 400;
private Button RGBtoCMY = new Button("RGBtoCMY");
private Button CMYtoRGB = new Button("CMYtoRGB");
private CercleCouleur C1;
private Panel p1,p2,p3,p4;
private TextArea f1,f2,f3,t1,t2,t3;
private Label l;


public class Action1 implements ActionListener{
public void actionPerformed(ActionEvent e1){

String v1 = f1.getText();
int Iv1 = Integer.parseInt(v1);
t1.setText(""+ConvertRouge(Iv1)+"");

String v2 = f2.getText();
t2.setText(v2);

String v3 = f3.getText();
t3.setText(v3);

}
}

public class Action2 implements ActionListener{
public void actionPerformed(ActionEvent e2){

String w1 = t1.getText();
f1.setText(w1);

String w2 = t2.getText();
f2.setText(w2);

String w3 = t3.getText();
f3.setText(w3);
}
}

public class MyWindowListener extends WindowAdapter{
public void windowClosing(WindowEvent we){
System.exit(0);
}
}


public Graphique(){

addWindowListener(new MyWindowListener());

setSize(LARGEUR,HAUTEUR);
setBackground(Color.gray);
setForeground(Color.black);
setLayout(new GridLayout(3,3));

f1 = new TextArea();
//f1.setEditable(false);
f2 = new TextArea();
//f2.setEditable(false);
f3 = new TextArea();
//f3.setEditable(false);
t1 = new TextArea();
//t1.setEditable(false);
t2 = new TextArea();
//t2.setEditable(false);
t3 = new TextArea();
//t3.setEditable(false);


Panel p1 = new Panel(new GridLayout(1,3));
p1.add(f1);
p1.add(f2);
p1.add(f3);

Panel p2 = new Panel(new GridLayout(1,3));
p2.add(t1);
p2.add(t2);
p2.add(t3);

add(p1);

RGBtoCMY.addActionListener(new Action1());
add(RGBtoCMY);

Panel p3 = new Panel(new BorderLayout());
Label l = new Label("Ceci est la couleur en RGB : ");
p3.add(l, BorderLayout.CENTER);
add(p3);


Panel p4 = new Panel(new BorderLayout());
C1 = new CercleCouleur(Color.green, 135, 10);
p4.add(C1, BorderLayout.CENTER);
add(p4);

add(p2);

CMYtoRGB.addActionListener(new Action2());
add(CMYtoRGB);
//pack();
setVisible(true);

}

public static void main(String[]args){

Graphique G = new Graphique();
System.out.println(G);

}



}

Et pour le code de l'erreur :

Graphique.java.21: cannot find symbol
symbol: method ConvertRouge(int)
location: class Graphique.Action1
t1.setText(""+ConvertRouge+""); (c'est là que se trouve l'erreur)

Voilà.
Pardon :

t1.setText(""+ConvertRouge(Iv1)+"");
Messages postés
9367
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 330
Il y a des erreurs dans ton code.

Tu déclares une première class Graphique et sans la fermer avec un }, tu déclares à l'intérieur de celle-ci une autre classe, déjà ça ne fonctionne pas.

Et encore tu as déclaré toutes tes classes Action, à l'intérieur de la classe Graphique.java.

Pour que cela soit plus simple, il est préférable de déclarer un fichier .java par classe, et surtout ne pas incorporer le code d'une classe dans une autre, ça ne peut pas fonctionner.
Mon parenthèsage est bon (toutes les accolades sont férmées si tu regardes bien) et il n'y a aucun problème en java à déclarer des classes à l'intérieur d'une autre classe, elles seront juste compilées en Graphique$Action1.class (par exemple). De plus, sans la méthode Convert tout compilait et s'exécutait très bien, donc je ne pense pas que le problème vienne de là ;-)
Messages postés
9367
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 330
Non tes parenthèses ne sont pas bonnes :

public class Graphique extends Frame{

private static final int LARGEUR = 800;
private static final int HAUTEUR = 400;
private Button RGBtoCMY = new Button("RGBtoCMY");
private Button CMYtoRGB = new Button("CMYtoRGB");
private CercleCouleur C1;
private Panel p1,p2,p3,p4;
private TextArea f1,f2,f3,t1,t2,t3;
private Label l;


public class Action1 implements ActionListener{

Tu m'excuseras mais ta classe n'est pas fermée avant la deuxième ... et toutes tes classes sont déclarées dans la première
Oui et je te répète qu'il n'y a aucun problème à cela en java.
Mais je te remercie tout de meme de ton aide.
Messages postés
9367
Date d'inscription
mardi 27 septembre 2005
Statut
Contributeur
Dernière intervention
16 décembre 2016
1 330
Sauf que tu n'as pas importé ta classe RGB ni même crée d'objet RGB, donc pas possible d'appeler une fonction inexistante.
Messages postés
405
Date d'inscription
lundi 24 mars 2008
Statut
Membre
Dernière intervention
22 janvier 2013
45
Ouais ba ca risque pas de fonctionner comme ca ^^.

Ta methode fait partie de l'objet RGB. Tu connais l'objet RGB, mais pour connaitre ce qu'il y a dans l'objet RGB, encore faudrait il pouvoir y acceder non ? ;)

Donc ce qu'il faut que tu fasses:
1) Ton appel doit se faire comme ceci:
RGB.ConvertRouge(Iv1)


2) Etant donne que tu veux appeler une fonction d'une classe sans en avoir instancie l'objet, il te faudra changer le prototype de ta fonction en rajoutant le mot cle "static":
public static int ConvertRouge(int Rouge){


Voila ca devrait marcher maintenant ;)
Oui c'était bien ça le problème. Tout marche très bien maintenant.
Merci beaucoup matthoffman !!