Javac..connot find symbol..

Résolu/Fermé
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016 - 6 oct. 2015 à 19:57
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016 - 7 oct. 2015 à 19:43
Bnj,
j'ai créer 3 classes, et je veux exécuter chaque classe dans un terminal.
mon problème c'est que j'utilise dans la 3eme classe les deux autres classes; exp :
dans la classe "classeur" j'utilise la classe "fibo": new fibo(pipeInf).start();
et quand je compile la classe classeur avec "javac" j'obtient cette erreur:
cannot find symbol new fibo(pipeInf).start();
symbole: class fibo.

et j'ai aucune idée pour résoudre ce problème.
En attente de vos aides ...

2 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 oct. 2015 à 20:11
Bonjour,

Le plus simple est de compiler les 3 classes en même temps, dans ce cas le fichier .java à compiler est celui qui contient la méthode
main(String[])
ce qui compilera automatiquement les autres.

Sinon, pour compiler du code qui utilise des classes déjà compilées il faut ajouter celles-ci au classpath lors de la compilation (option -cp)

https://docs.oracle.com/javase/8/docs/technotes/tools/windows/javac.html
2
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016
Modifié par hayaaat le 6/10/2015 à 20:53
MRC, je compile les 3 classes en même temps et ça marche :)..

mais je ne sais pas comment les exécuter pour obtenir l'affichage de chaque classe dans un terminal, j'essaye : java fibo carre classeur (fibo carre classeur sont les noms de mse classes)
mais cette erreur est apparu : impossible de trouver ou charger la classe principale fibo.
même cas quand je fais : java nom_une_seul_classe.
note: j'ai la classe main.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 oct. 2015 à 21:17
De même que tu ne compiles que la classe qui a la méthode main, tu ne dois exécuter que celle qui a la méthode main. Je ne sais pas laquelle c'est dans ton exemple.

java package.nomClasse

Si ça ne fonctionnes toujours pas donnes moi le début de chaque fichier java.
La seule chose qui m'intéresse ce sont les lignes qui contiennent le nom de la classe (
class fibo
) et les lignes qui sont au dessus (s'il y en a).
0
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016
6 oct. 2015 à 21:30
malheureusement ça marche pas.

la classe fibo:

package pipe;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;

public class fibo extends Thread{
final int n=15;
int k;
private DataOutputStream out;


public fibo(PipedInputStream i)
{
try
{
out = new DataOutputStream(new PipedOutputStream(i));
}
catch (IOException e) { }
}


public void run(){

try
{
for(int j=0; j<=n; j++){
k=f(j);
System.out.println("fibo de "+j+" est: "+k );
out.writeInt(k);
Thread.sleep(100);
}
}
catch (IOException e) { } catch (InterruptedException e) {

e.printStackTrace();
}
}

int f (int n){
if (n<2)
return n;
else
return f(n-1)+f(n-2);
}
}



la classe carre:

package pipe;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.PipedInputStream;
import java.io.PipedOutputStream;


public class carre extends Thread{
final int n=15;
int k;
private DataOutputStream out;

public carre(PipedInputStream i)
{
try
{
out = new DataOutputStream(new PipedOutputStream(i));
}
catch (IOException e) { }
}


public void run(){

try
{
for(int j=0; j<=n; j++){
k=c(j);
System.out.println("carre de "+j+" est: "+k );
out.writeInt(k);
Thread.sleep(100);
}
}
catch (IOException e) { } catch (InterruptedException e) {

e.printStackTrace();
}
}

int c (int n){
return n*n;
}
}



la classe classeur:


package pipe;

import java.io.DataInputStream;
import java.io.IOException;
import java.io.PipedInputStream;




public class classeur extends Thread{
final int n=32;
int tab[]=new int [n];

public classeur()
{
for(int j=0; j<30;j++)
tab[j]=0;



}

public void run(){
int h=0;

PipedInputStream pipeInf = new PipedInputStream();
new fibo(pipeInf).start();

PipedInputStream pipeInc = new PipedInputStream();
new carre(pipeInc).start();

DataInputStream inf =new DataInputStream(pipeInf);
DataInputStream inc =new DataInputStream(pipeInc);


try{
while(true){
tab[h]=inf.readInt();
tri(h);
System.out.print(" \n classeur: ");
for(int j=0; j<h;j++)
System.out.print(tab[j]+" , ");
System.out.print(" \n");
h++;
tab[h]=inc.readInt();
tri(h);
System.out.print(" \n classeur: ");
for(int j=0; j<h;j++)
System.out.print(tab[j]+" , ");
System.out.print(" \n");
h++;
}
}catch (IOException e) { }
}

void tri(int longueur)
{
int i;
int memoire=0, compteur = 0;
boolean marqueur;

for(i=1; i<longueur; i++)
{
memoire = tab[i];
compteur = i-1;
do
{
marqueur = false;
if(tab[compteur] > memoire)
{
tab[compteur+1] = tab[compteur];
compteur--;
marqueur = true;
}
if(compteur < 0)
marqueur = false;
}
while(marqueur);
}
tab[compteur+1] = memoire;
}

public static void main(String[] args) {

new classeur().start();

}
}
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 6/10/2015 à 21:46
Je viens de tester et ça fonctionne (j'ai pas regardé le code en détail, mais le résultat semble mathématiquement faux).

Je pense que tu as oublié de prendre en compte le package lorsque tu compiles et exécutes ta classe.

Imaginons que tu travailles dans
C:\Workspace\Projet
. Tu devrais avoir les trois fichiers comme ceci :

C:\Workspace\projet\pipe\classeur.java
C:\Workspace\projet\pipe\carre.java
C:\Workspace\projet\pipe\fibo.java

Puis en ligne de commandes tu dois être dans le répertoire
C:\Workspace\projet
et faire :

javac pipe\classeur.java
java pipe.classeur
0
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016
6 oct. 2015 à 22:12
Merci beaucoup pour vos efforts et votre temps, l'exécution ça marche.
mais si ça ne vous dérange pas je veux savoir s'il y'a une méthode pour séparer l'affichage c_à_d l'affichage de la classe fibo dans une fenêtre d'invite de commandes, l'affichage de la classe carre dans une autre fenêtre d'invite de commandes,et l'affichage de la classe classeur dans une autre fenêtre d'invite de commandes.
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
6 oct. 2015 à 22:48
Voici une petite interface graphique pour écrire dans autant de zones que tu veux.

J'ai fait ça en 20 mn, il y a peut-être des trucs à revoir ;-)

package pipe;

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;

public class MultiTextDisplay {
    
    private final JTextArea[] texts;
    private final JFrame frame;
    
    public MultiTextDisplay(String title, int nbZones) {
        frame = new JFrame(title);
        texts = new JTextArea[nbZones];
        int rows = (int) Math.sqrt(nbZones);
        frame.setLayout(new GridLayout(rows, nbZones/rows));
        for (int i=0; i<nbZones; i++) {
            JTextArea text = new JTextArea();
            text.setEditable(false);
            text.setBackground(new Color(Color.HSBtoRGB(1f/nbZones*i, 0.1f, 1f)));
            texts[i] = text;
            frame.add(new JScrollPane(text));
        }
        frame.pack();
        frame.setLocationRelativeTo(null);
        frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
    
    public void println(int n, Object toPrint) {
        texts[n].setText(texts[n].getText()+toPrint+"\n");
        texts[n].setCaretPosition(texts[n].getText().length());
    }
    
    public static void main(String[] args) {
        MultiTextDisplay display = new MultiTextDisplay("Ma Fenetre", 3);        
        for (int i=0; i<1000; i++)
            display.println(i%3, i);
    }
}
1
hayaaat Messages postés 15 Date d'inscription mercredi 15 avril 2015 Statut Membre Dernière intervention 22 avril 2016
7 oct. 2015 à 19:43
c'est merveielleux, mrc mrc mrc :)
0