2013-04-15 13 views
5

Mam klasę "A", która jest "możliwa do uruchomienia", a ja tworzę nowe obiekty z obiektów unmarshallers języka Java. Wątek MainGUI próbuje uzyskać dostęp do tych instancji za pomocą metody get(), która jest już w klasie "A". Instancje, które utworzyłem w klasie A, zrobiłem je statyczne, aby były dostępne na zawsze, ale problem, gdy otrzymam nową kompletną instancję, która ma inne właściwości, muszę porównać nową instancję z poprzednimi danymi i zachować nowy.Najlepszy sposób przekazywania obiektów między klasami w różnych wątkach?

Czy istnieje lepszy sposób lub projekt tego problemu?

Jak uzyskać wystąpienia klasy "A", które są tworzone w czasie wykonywania bez ustawiania ich w statystykach?

Przykładowy kod:

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

Co masz na myśli przez "poprzednie dane i zachować nowe"? Czy zastępujesz instancję? –

+0

OP oznacza, że ​​chce zachować stan ostatniego obiektu (dla porównania) i nowy, a także – Freak

+0

czy możesz podać fragmenty kodu? –

Odpowiedz

0

Można zadeklarować referencję typu „A” w głównym i które przechodzą do innego wątku. W drugim wątku wykonaj operacje i przypisz nowe wystąpienie litery A do odwołania. coś takiego

A aVariable; 
Thread t = new Thread(new MyThread(aVariable)); 
t.start(); 
t.join(); 
populateGUI(aVariable); 
Powiązane problemy