2010-09-02 4 views
0

Dans l'une de ma classe, j'ai le code suivant:Obtenez des couleurs par défaut du système à partir de fils non Ui

private static final Color GREEN = new Color(null, 0, 255, 0); 

Je sais la classe Display fournit la méthode suivante:

Display.getSystemColor(int id) 

pour revenir couleurs système "par défaut" au lieu d'instancier de nouvelles couleurs. Quelle est la meilleure solution pour obtenir une instance Display dans le contexte du code statique appelé dans un thread non Ui?

Répondre

0
PlatformUi.getWorkbench().getDisplay() 
+0

Vous pouvez obtenir l'affichage, mais vous ne pouvez pas émettre d'appels liés à l'interface utilisateur en dehors de la bande de roulement de l'interface utilisateur, y compris getSystemColor. Si cela réussit, cela signifie que vous êtes sur le thread de l'interface utilisateur. S'il peut y avoir un cas où vous n'êtes pas dans le fil de l'interface utilisateur, vous devez vous protéger comme indiqué dans ma réponse. Si cela peut fonctionner sur votre machine et échouer sur un autre. – zvikico

+0

Oui, vous avez raison. J'utilise ma réponse pour obtenir un affichage, puis j'y exécute syncExec. +1 pour votre réponse –

1

Effectuez tous les appels d'information de l'interface utilisateur dans l'initialisation principale avant de créer des threads. Enregistrez les données pour une utilisation ultérieure dans les threads non UI.

+0

Merci pour la réponse, mais j'écris un plugin eclipse "library" qui n'a pas accès au thread principal. –

1

Vous devrez utiliser Display.getDefault().syncExec(...) appel. À l'intérieur de votre runnable, vous pouvez exécuter quelque chose comme Display.getDefault().getSystemColor(...). Pour renvoyer la valeur, vous devrez la conserver dans un champ de votre runnable, puis accéder à ce champ à partir de la méthode d'invocation.

Depuis l'exécution est avec syncExec, assurez-vous de ne pas entrer un dead-lock (l'interface utilisateur appelle votre service qui a essayé d'appeler l'interface utilisateur peut le provoquer).

Questions connexes