java-forum.org
JBoss Seam
Alter Preis: 39,95 €
Jetzt: 0,00 €

zzgl. Versandkosten

Zurück   java-forum.org > Blogs > Landei

Bewerten

Wie ein Runnable etwas zurückgeben kann

Veröffentlicht: 22.05.2010 um 12:30 von Landei
Folgende Situation: Ich wollte in einer Methode ein Fenster erzeugen und zurückgeben. Sicher, nichts einfacher als das... wenn man Sun's Empfehlung ignoriert, das ganze im EDT zu starten. Sicher, in der Praxis gibt es normalerweise keine Schwierigkeiten, wenn man zumindest den JFrame-Konstruktor im aktuellen Thread ausführt, und nur das "Befüllen" im Runnable erledigt. Aber hier bin ich ein Prinzipienreiter: Ich will ein Runnable, das etwas zurückgibt...

Lustigerweise kommt in meiner Lösung das Wort Runnable gar nicht vor, dafür das weniger bekannte Interface Callable und die Klasse FutureTask - die im Prinzip aus einem Callable ein Runnable macht:

Java Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
public JFrame getFrame() {
  FutureTask<JFrame> task = new FutureTask<JFrame>(new Callable<JFrame>(){
      public JFrame call() {
         JFrame frame = new JFrame("Hey");
         //Initialisierung von frame
         frame.setVisible(true);
         return frame;
      }
  });
  SwingUtilities.invokeLater(task);
  return task.get();
}

Statt mit task.get() einfach schnöde zu blockieren, kann man auch einen Time-Out angeben oder mit task.isDone() fragen, ob der Task schon fertig ist.

Soviel zu einer relativ einfachen Technik, um ohne faule Tricks einen Wert zurückzubekommen, auch wenn die API nur ein Runnable haben will.
"Wie ein Runnable etwas zurückgeben kann" bei Mister Wong speichern "Wie ein Runnable etwas zurückgeben kann" bei YiGG.de speichern "Wie ein Runnable etwas zurückgeben kann" bei Google speichern "Wie ein Runnable etwas zurückgeben kann" bei del.icio.us speichern
Kategorie: Kategorielos
Hits 251 Kommentare 0 Hinweis auf diesen Blog-Eintrag per E-Mail verschicken
« Zurück     Startseite des Blogs     Nächste »
Kommentare 0

Kommentare

 

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:20 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2010, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de