pourquoi un objet créé dans un Theard secondaire n'est pas "capter" dans le Theard principal?
Bonjour,
Soit le code suivant:
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
// Affiche des images sur la moitié droite de l'écran
private AnchorPane GetPaneDroite() {
Dimension sizeScreen = oUtil.GetDimScreen(); // Obtient les dimensions de l'écran
double dHeightScreen = sizeScreen.getHeight();
double dWidthScreen = sizeScreen.getWidth() / 2;
Image imgParag01 = getInitParag(CST_PATH_P01);
ImageView oP01 = new ImageView(imgParag01);
oP01.setFitHeight(dHeightScreen);
oP01.setFitWidth(dWidthScreen);
AnchorPane oPane = new AnchorPane();
oPane.getChildren().add(oP01);
return oPane;
}
// Lit le répertoire passé en paramètre et retourne un paragraphe d'une traduction aléatoire
private Image getInitParag(String pathParag) {
File[] lstParag = oUtil.ReadDirectory(CST_PATH_JPG, pathParag);
int iAlea = oUtil.GetRandom(lstParag.length);
Image oneParag = oUtil.LoadImageJPG(lstParag[iAlea]);
return oneParag;
} |
Lorsqu'il est exécuté sur le Theard principal, il marche et l'image s'affiche correctement. Cependant, comme mon but est d'afficher plusieurs images, j'aimerais le faire s'exécuter sur un Theard secondaire. J'ai donc écrit ceci:
Code:
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
|
try {
final Service<AnchorPane> InitServPaneDroite;
InitServPaneDroite = new Service<AnchorPane>() {
@Override
protected Task<AnchorPane> createTask() {
return new Task<AnchorPane>() {
@Override
protected AnchorPane call() throws Exception {
Dimension sizeScreen = oUtil.GetDimScreen(); // Obtient les dimensions de l'écran
double dHeightScreen = sizeScreen.getHeight();
double dWidthScreen = sizeScreen.getWidth() / 2;
Image imgParag01 = getInitParag(CST_PATH_P01);
ImageView oP01 = new ImageView(imgParag01);
oP01.setFitHeight(dHeightScreen);
oP01.setFitWidth(dWidthScreen);
AnchorPane oPane = new AnchorPane();
oPane.getChildren().add(oP01);
return oPane; }
};
}
};
InitServPaneDroite.stateProperty().addListener(new ChangeListener<Worker.State>() {
@Override
public void changed(ObservableValue<? extends Worker.State> observableValue, Worker.State oldValue, Worker.State newValue) {
if (newValue == Worker.State.SUCCEEDED) {
oPaneDroite = InitServPaneDroite.getValue();
}
}
});
InitServPaneDroite.start();
return oPaneDroite;
} catch (Exception e) {
MessageAlert oMsg = new MessageAlert();
StringBuilder oMsgTxt = new StringBuilder(e.getLocalizedMessage());
oMsg.MessageShow(CST_MSG_ERR, oMsgTxt);
return null;
} |
Et cela ne marche plus. Savez-vous m'expliquer pourquoi un objet créé dans un Theard secondaire n'est pas "capter" dans le Theard principal? Je suppose que c'est un problème courant. Il y a-t-il une méthode particulière pour y remédier?
Merci de vos explications