Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Utilisation d'une classe d'un package dans un autre package

3 réponses
Avatar
rustine22
Bonjour,

j'avais un prog en java composé de qq classes dans le package par
defaut. En cherchant sur le net, j'ai trouvé un package "client FTP"
tres pratique nommé com.cqs.ftp (j'ai les sources) .

Dans ce package, je veux modifier une classe d'affichage de
l'avancement de l'upload (StdoutSizeTransferMonitor ) du package
com.cqs.ftp, en rajoutant dans le constructeur une "réference" à une
classe graphique (ThreadGraphique) de mon prog principal (dans le
package par défaut) qui permettra d'appeler une méthode de MAJ d'une
barre d avancement..

Le problème, c'est que Eclipse me reponds :

ThreadGraphique ne peut pas être résolu (ou ne correspond pas à un
type valide) pour la zone StdoutSizeTransferMonitor.t

ou t est un champ privé de la classe StdoutSizeTransferMonitor de type
ThreadGraphique..

J'ai bien mis la classe ThreadGraphique en public pour qu'elle soit
visible par le 2eme package (com.cqs.ftp )..

J'ai ensuite tenté de mettre le prog principal dans un package (autre
que par defaut) que j'ai appelé "mainprog" et rajouté un :

import mainprog;
ou
import mainprog.*;
dans StdoutSizeTransferMonitor

mais Eclipse me dit :

L'importation mainclass ne peut pas être résolue

Je ne sais plus quoi faire.. Un probleme de CLASSPATH? (pourtant
Eclipse l'avait tres bien geré jusqu'à maintenant..)

Merci

Marc

3 réponses

Avatar
Orabîg
rustine22 wrote:
(...)
ThreadGraphique ne peut pas être résolu (ou ne correspond pas à un
type valide) pour la zone StdoutSizeTransferMonitor.t
(...)


Je comprends pas bien, mais est-ce que tu es certain d'avoir déclaré le
package de ThreadGraphique dans la classe qui essaye d'y accéder ?
Si par exemple, cette classe ThreadGraphique est dans le package mainprog,
le source de ta classe "customizée" StdoutSizeTranferMonitor doit ressembler
à ça :

package com.cqs.ftp;

(...)
import mainprog.*; // Permet à cette classe de "voir" la classe
ThreadGraphique
(...)

public class StdoutSizeTranferMonitor
(...)
private ThreadGraphique t = null;
(...)

Si ca ne marche toujours pas, est-ce que ces deux classes sont dans le même
projet sous Eclipse ? Si ce n'est pas le cas, il faut que tu ajoutes une
dépendance entre les projets.

Une dernière remarque : je ne connais pas la bibliothèque com.cqs.ftp dont
tu parles, mais je suis étonné que tu sois obligé de modifier ses sources
pour ajouter ton propre moniteur graphique. Es-tu sur qu'il ne suffit pas de
remplacer le moniteur StdoutSizeTranferMonitor par un autre à toi qui
implémenterais la même interface ? Ca me semble beaucoup plus propre comme
ça.

Javament

--
Benoît Chauvet

Avatar
rustine22
Bonsoir,

merci pour ta réponse, j'ai en fait redéfini le classpath correctement
(cad dans les proprietés avancées du poste de travail) et surtout
redemarré Eclipse!

Et la miracle, Eclipse a bien accepté la ligne

import mainprog.*;

Sinon concernant ta dernière question :

La classe d'affichage dont je parle StdoutSizeTransferMonitor porte
bien son nom car elle affiche sur la sortie standard, l'avancement en
bytes .. mais elle dérive d'une classe comportant des méthodes
virtuelles faite exprès pour visualiser les transferts :
TransferMonitor

Par paresse, j'ai réecrit StdoutSizeTransferMonitor alors que j'aurais
du en ecrire une autre derivant de TransferMonitor comme
FrameTransferMonitor..

A+
Marc




"Orabîg" wrote in message news:<bp7b1k$1qe$...
rustine22 wrote:
(...)
ThreadGraphique ne peut pas être résolu (ou ne correspond pas à un
type valide) pour la zone StdoutSizeTransferMonitor.t
(...)


Je comprends pas bien, mais est-ce que tu es certain d'avoir déclaré le
package de ThreadGraphique dans la classe qui essaye d'y accéder ?
Si par exemple, cette classe ThreadGraphique est dans le package mainprog,
le source de ta classe "customizée" StdoutSizeTranferMonitor doit ressembler
à ça :

package com.cqs.ftp;

(...)
import mainprog.*; // Permet à cette classe de "voir" la classe
ThreadGraphique
(...)

public class StdoutSizeTranferMonitor
(...)
private ThreadGraphique t = null;
(...)

Si ca ne marche toujours pas, est-ce que ces deux classes sont dans le même
projet sous Eclipse ? Si ce n'est pas le cas, il faut que tu ajoutes une
dépendance entre les projets.

Une dernière remarque : je ne connais pas la bibliothèque com.cqs.ftp dont
tu parles, mais je suis étonné que tu sois obligé de modifier ses sources
pour ajouter ton propre moniteur graphique. Es-tu sur qu'il ne suffit pas de
remplacer le moniteur StdoutSizeTranferMonitor par un autre à toi qui
implémenterais la même interface ? Ca me semble beaucoup plus propre comme
ça.

Javament



Avatar
Benoît Chauvet
rustine22 wrote:
Bonsoir,

merci pour ta réponse, j'ai en fait redéfini le classpath correctement
(cad dans les proprietés avancées du poste de travail) et surtout
redemarré Eclipse!

Et la miracle, Eclipse a bien accepté la ligne


En effet, Eclipse aime bien qu'on le redemarre de temps à autre (il aime
bien les F5 aussi, pour rafraichir tel ou tel projet. A consommer sans
modération)

Sinon concernant ta dernière question :

La classe d'affichage dont je parle StdoutSizeTransferMonitor porte
bien son nom car elle affiche sur la sortie standard, l'avancement en
bytes .. mais elle dérive d'une classe comportant des méthodes
virtuelles faite exprès pour visualiser les transferts :
TransferMonitor

Par paresse, j'ai réecrit StdoutSizeTransferMonitor alors que j'aurais
du en ecrire une autre derivant de TransferMonitor comme
FrameTransferMonitor..


Alors si tu es conscient du fait, tout va bien. :)
De plus, si une classe abstraite existe, elle doit vraiment faire tout le
boulot.

Enfin, je n'ai pas perdu ma journée, j'ai trouvé qqun d'encore plus
paresseux que moi ;)

Javament

--
Benoît Chauvet