2013-04-15 7 views
5

Ho una classe "A" che è "eseguibile" e creo nuovi oggetti fuori da unmarshaller Java. Il thread MainGUI tenta di accedere a tali istanze da un get() che è già nella classe "A". Le istanze che ho creato in classe A, li ho resi statici, in modo che fossero disponibili per sempre, ma il problema quando ottengo una nuova istanza completa che ha proprietà diverse, devo confrontare la nuova istanza con quella precedente e mantenere quello nuovo.Il modo migliore per passare oggetti tra classi in thread diversi?

Esiste un modo migliore per progettare il problema?

Come posso ottenere le istanze di Classe "A" che vengono create in fase di runtime senza renderle statiche?

codice di esempio:

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

Che cosa intendi per "dati precedenti di uno e mantenere quello nuovo"? Stai sostituendo l'istanza? –

+0

OP significa che desidera mantenere lo stato dell'ultimo oggetto (per il confronto) e quello nuovo – Freak

+0

puoi fornire frammenti di codice? –

risposta

0

Si potrebbe dichiarare un riferimento di tipo "A" nella principale e passare che per l'altro thread. Nell'altro thread eseguire le operazioni e assegnare la nuova istanza di A al riferimento. Qualcosa di simile

A aVariable; 
Thread t = new Thread(new MyThread(aVariable)); 
t.start(); 
t.join(); 
populateGUI(aVariable); 
Problemi correlati