Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    [JAVA] Thread e gestione delle liste

    Un saluto a tutti gli amici javisti del forum.

    Ho un dilemma cui sto combattendo da qualche periodo a questa parte, ed è arrivato il momento di sbrigarlo.
    Sto realizzando una tesina per (finalmente) l'ultimo esame della mia carriera e si tratta di un simulatore.
    Siccome sto usando apache batik poichè devo manipolare dei file SVG, per l'animazione occorre sapere utilizzare i Thread.

    Il punto è questo, io carico un file di testo con il quale ottengo una lista di richieste da servire, come faccio a dire al thread che sto usando una lista?

    Ho fatto delle applicazioni di prova, se utilizzo un ciclo for all'interno del Thread assume dei comportamenti anomali, ad esempio non esegue tutto il ciclo e si interrompe oppure rimane in "stallo".

    Ho girato un pò su internet ma non trovo informazioni in merito, pare che i Thread siano un argomento poco trattato, anche da altri colleghi di lavoro.

    Se qualcuno ha qualche informazione in merito è molto gradita, grazie a tutti in anticipo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: [JAVA] Thread e gestione delle liste

    Originariamente inviato da Bayliss21
    Un saluto a tutti gli amici javisti del forum.
    Ciao e benvenuto.

    Originariamente inviato da Bayliss21
    Siccome sto usando apache batik poichè devo manipolare dei file SVG, per l'animazione occorre sapere utilizzare i Thread.
    Premesso che conosco Batik solo di nome .... comunque non è sicuramente questo il punto della questione.

    Originariamente inviato da Bayliss21
    come faccio a dire al thread che sto usando una lista?
    Qui scusa ma la questione è vaga o posta male. Cosa vuol dire? Intendi passare ad un thread una lista? (collezione? immagino)

    Se intendi dire "passare" al thread una lista, direi che è banale. Il "lavoro" di un thread lo si definisce facendo una classe che: a) implementa Runnable (da passare poi ad un Thread) oppure b) estende Thread.
    In ogni caso nessuno ti vieta di passare ad un costruttore (che definisci tu) la lista, tenendola poi in un campo di istanza in modo che il run() possa usarlo.

    Se invece intendi altro .... descrivi meglio.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Bè l'italiano con l'informatica fanno un pò a cazzotti comunque adesso cerco di descrivere meglio la situazione.

    Dunque ho una swing che mi visualizza un'immagine, alcuni oggetti di questa immagine cambieranno di stato mediante una classe Thread, perciò il codice dell'animazione si trova all'interno del metodo run().
    Fin qui ci siamo.
    Adesso io ho aggiunto un caricamento di un file di testo che contiene informazioni, tali informazioni mi servono per modificare lo stato dell'immagine sulla swing e perciò per eseguire l'animazione.
    Siccome queste informazioni le ho salvate su un oggetto di tipo ArrayList<Obj>, vorrei capire come utilizzare questa lista all'interno dell'animazione che viene richiamata all'interno del metodo run().

    Spero di essere stato abbastanza chiaro e ti ringrazio per l'interessamento.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    beh l'italiano dovrebbe essere noto a tutti a prescindere da cosa si studi.

    Vediamo se ho capito, tu hai la classe
    Frame extends JFrame che visualizza delle immagini
    la classe MyThread che genera runtime una lista di object che aggiornano lo stato.

    Penso sia un problema risolvibile con meccanismi di "lancio eventi e notify".
    Cioè alla rilettura del file, caricato l'array lanci un evento x (che si porta in pancia la nuova modifica), il frame gestisce l'evento e si occupa di un repaint. Farlo dipende quanto ne sai tu di java, swing, thread ed eventi.

  5. #5
    Dunque io la lista la carico prima di lanciare l'animazione, poichè ho notato che se lo facessi all'interno del thread, l'applicazione non funziona come dovrebbe.

    Io dovrei fare questo


    codice:
    for(dalla prima all'n-1esima richiesta){
           prendi la richiesta i-esima;
           prendi la successiva o j-esima;
           if(richiestaI<richiestaJ){
               sali
           }else{
               scendi
           }
    }
    Tutto ciò se possibile all'interno di un thread, poichè Batik per le animazioni di file svg usa appunto i thread.
    Siccome non sono molto "smart" nell'utilizzo dei thread, vorrei capire bene come implementare questo meccanismo.

  6. #6
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    si ma devi aggiornarla periodicamente? Il thread lo si fa per questo motivo

  7. #7
    Allora io caricherò la lista prima di far partire l'animazione, la mia idea è (in base alle conoscenze che ho io) di far leggere questa lista di richieste al thread.
    Prendo la richiesta i-esima e la successiva, le confronto e faccio partire l'animazione.
    L'animazione è gestita dal thread quindi dovrei fare in mondo che il thread gestisca questa lista in maniera tale che legga due elementi della stessa per fare l'animazione.

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    non ho capito un'acca di quello che devi fare.

    Ripeto la domanda: devi far caricare la lista una sola volta oppure ogni tot devi caricarla?

    Se devi caricarla una sola volta non hai bisogno di thread, ti basta fare queste operazioni (in cui prepari i dati) prima di costruire i componenti grafici.
    Se devi farla ogni tot la cosa si complica un po.
    Cerca di spiegarti meglio (magari con un esempio)

  9. #9
    Si mi rendo conto che il problema non è semplice e certi aspetti sembrano poco chiari.

    Allora io la lista la carico una sola volta. Siccome l'applicazione deve manipolare file SVG, uso Apache Batik per manipolare file SVG.
    Allego qui un link dove vedere un esempio

    http://xmlgraphics.apache.org/batik/...ting/java.html

    Come vedi per fare le animazioni usa una classe Thread che implementa Runnable.
    Quindi io vorrei capire come prendere i dati dalla lista e passarli alla classe Thread per implementare l'animazione.

    Sono abbastanza conscio che queste due cose cozzano tra loro ma la logica dell'applicazione richiede queste due cose.
    Spero di essere stato chiaro...

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    come ti diceva andbin all'inizio: la classe Thread (o che ha il thread) ha comunque un costruttore: a questo o passi la lista che carichi nella classe che chiama il thread oppure banalmente usi il costruttore per caricare la lista, molto semplice
    Io pensavo che la lista dovessi caricarla ogni tot di tempo tot volte (è diversa la gestione), per questo ti basta il costruttore

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.