2013-04-15 6 views
5

Ich habe eine Klasse "A", die "runnable" ist und ich mache neue Objekte aus Java-Unmarshaller. Der MainGUI-Thread versucht, auf diese Instanzen mit einem get() zuzugreifen, der bereits in der Klasse "A" ist. Die Instanzen, die ich in Klasse A erstellt habe, habe ich statisch gemacht, damit sie für immer verfügbar sind. Aber wenn ich eine neue vollständige Instanz mit anderen Eigenschaften erhalte, muss ich die neue Instanz mit den vorherigen vergleichen und behalten der Neue.Die beste Methode, um Objekte zwischen Klassen in verschiedenen Threads zu übergeben?

Gibt es einen besseren Weg oder ein besseres Design für dieses Problem?

Wie bekomme ich die Instanzen der Klasse "A", die zur Laufzeit erstellt werden, ohne sie statisch zu machen?

Beispielcode:

public class SOAPMessagesFactory { 

    private static GetCameraImageResponse    getCameraImageResponse; 

// process here the msgs in another thread, not shown here in that snipped 
    if (messageTag.equalsIgnoreCase("GetCameraImageResponse")) { 
       try { 
        JAXBElement<GetCameraImageResponse> cameraImageResponse = unmarshaller.unmarshal(SoapBodyReader, GetCameraImageResponse.class); 
        getCameraImageResponse = cameraImageResponse.getValue(); 

       } catch (Throwable ex) { 
        ex.printStackTrace(); 
       } 

      } 

public GetCameraImageResponse getCameraImageResponse() { 

    if (getCameraImageResponse != null) { 
     return getCameraImageResponse; 
    } else { 
     return null; 
    } 

} 
    // in main gui 

public void UpdateGUI() { 

     GetCameraImageResponse cameraImageResponse = messageFactory.getCameraImageResponse(); 

} 
+0

Was meinst du mit 'vorherige eine Daten und die neue '? Ersetzen Sie die Instanz? –

+0

OP bedeutet, dass er den Status des letzten Objekts (zum Vergleich) behalten möchte und auch einen neuen – Freak

+0

können Sie Code-Schnipsel bereitstellen? –

Antwort

0

Sie könnten einen Verweis vom Typ "A" in Haupt erklären und dass zum anderen Thread übergeben. Führen Sie im anderen Thread die Operationen aus und weisen Sie der Referenz die neue Instanz von A zu. So etwas wie dieses

A aVariable; 
Thread t = new Thread(new MyThread(aVariable)); 
t.start(); 
t.join(); 
populateGUI(aVariable); 
Verwandte Themen