Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    105

    Funzione per annullare trasferimento file

    Ciao a tutti e buon anno!
    Aiutavo un amico a sviluppare un applicazione in grado di trasferire file da un pc ad un altro.Tutto funziona ma vorrei fargli aggiungere una funzione che permettesse di annullare il processo di download o upload che sia. Secondo voi cosa dovrebbe fare la funzione?
    Avevo pensato a chiudere lo stream ma mi sembra una soluzione troppo drastica in quanto poi si chiuderebbe il socket ecc ecc..Avete qualche idea ? Grazie

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

    Re: Funzione per annullare trasferimento file

    Originariamente inviato da Cawletto
    Aiutavo un amico a sviluppare un applicazione in grado di trasferire file da un pc ad un altro.Tutto funziona ma vorrei fargli aggiungere una funzione che permettesse di annullare il processo di download o upload che sia. Secondo voi cosa dovrebbe fare la funzione?
    Avevo pensato a chiudere lo stream ma mi sembra una soluzione troppo drastica in quanto poi si chiuderebbe il socket ecc ecc..Avete qualche idea ? Grazie
    Dipende molto da come è fatta la parte che legge-da-file-e-invia-su-socket (o in senso opposto che sia). Un approccio tipico è quello di leggere/scrivere "a blocchi" quindi ci sarà il solito bufferino byte[] di un tot di byte e il solito ciclo while. In questi casi basterebbe trattare una variabile di stato che faccia terminare il ciclo. Da settare chiaramente da un altro thread prestando attenzione alle ovvie questioni sulla interazione tra thread.


    P.S. Quello che ho detto comunque è solo una parte della questione. Se mi dici che non vuoi chiudere stream/socket, io immagino subito che magari vuoi tenere "su" la connessione per poter fare "altro". Bene, in questo caso centra anche il "protocollo" di comunicazione che di certo devi aver inventato tu per la applicazione. Se da un host intendi smettere la lettura o scrittura corrente, l'altro host deve pure saperlo!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    105

    Re: Re: Funzione per annullare trasferimento file

    Originariamente inviato da andbin
    Dipende molto da come è fatta la parte che legge-da-file-e-invia-su-socket (o in senso opposto che sia). Un approccio tipico è quello di leggere/scrivere "a blocchi" quindi ci sarà il solito bufferino byte[] di un tot di byte e il solito ciclo while. In questi casi basterebbe trattare una variabile di stato che faccia terminare il ciclo. Da settare chiaramente da un altro thread prestando attenzione alle ovvie questioni sulla interazione tra thread.
    Infatti il trasferimento avviene a blocchi di 1024 kb..
    Comunque si penso di usare proprio una variabile di stato..è una buona idea

    Originariamente inviato da andbin
    P.S. Quello che ho detto comunque è solo una parte della questione. Se mi dici che non vuoi chiudere stream/socket, io immagino subito che magari vuoi tenere "su" la connessione per poter fare "altro". Bene, in questo caso centra anche il "protocollo" di comunicazione che di certo devi aver inventato tu per la applicazione. Se da un host intendi smettere la lettura o scrittura corrente, l'altro host deve pure saperlo!
    Si dopo lo stop invierò una stringa per informare che è stato annullato così cancellerà la parte di file che è già arrivata..in modo da non avere file incompleti.
    Grazie per il consiglio!

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

    Re: Re: Re: Funzione per annullare trasferimento file

    Originariamente inviato da Cawletto
    Si dopo lo stop invierò una stringa per informare che è stato annullato così cancellerà la parte di file che è già arrivata..in modo da non avere file incompleti.
    Se stavi trasferendo a blocchi "crudi" di X byte (crudo nel senso che non c'è altro a parte il puro stream letto dal file), non puoi banalmente inviare dopo una stringa (nemmeno qualcos'altro) per indicare l'annullamento. Dall'altra parte non sarebbe facile capire se stai continuando il trasferimento oppure no.
    Quello che serve in questi casi è pensare bene il protocollo in modo che ci siano "pacchetti" di dati ben descritti nel senso di avere proprio anche un header che dice cosa è e quanti byte contiene.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    105
    Ho un altro problema.. Io praticamente durante il trasferimento ho una finestra che contiene una Jprogress bar.. e ad ogni pacchetto inviato la barra avanza. In questa finestra c'è anche un bottone che mi serve per annullare il trasferimento..Però durante trasferimento (quindi mentre la barra aumenta) questo bottone non funziona! Nel senso che la funzione a cui è collegato non parte..Quando il trasferimento è finito invece funziona.. come risolvo?
    dovrei inserire qualcosa in un nuovo thread ?

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cawletto
    Ho un altro problema.. Io praticamente durante il trasferimento ho una finestra che contiene una Jprogress bar.. e ad ogni pacchetto inviato la barra avanza. In questa finestra c'è anche un bottone che mi serve per annullare il trasferimento..Però durante trasferimento (quindi mentre la barra aumenta) questo bottone non funziona! Nel senso che la funzione a cui è collegato non parte..Quando il trasferimento è finito invece funziona.. come risolvo?
    dovrei inserire qualcosa in un nuovo thread ?
    Se il trasferimento l'hai fatto nel contesto del EDT ... non solo non avanza la progressbar ma pure l'intera interfaccia utente è "congelata"!
    Letture/scritture su file, trasferimenti su socket, accesso a un DB sono tutte cose che vanno fatte in un thread a parte (con tutto quello che ne consegue).
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    105
    La progress bar avanza! è solo che mentre avanza non posso premere il tasto perchè non funziona..il punto è che secondo la finestra e il trasferimento dovrebbero essere su due thread diversi..o sbaglio ?? quindi metto il trasferimento in un nuovo thread ?

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cawletto
    La progress bar avanza! è solo che mentre avanza non posso premere il tasto perchè non funziona..
    Senza vedere l'architettura che hai fatto è difficile dire se è appropriata o no e perché.

    Originariamente inviato da Cawletto
    il punto è che secondo la finestra e il trasferimento dovrebbero essere su due thread diversi..o sbaglio ?? quindi metto il trasferimento in un nuovo thread ?
    1) Elaborazioni che fanno uso intensivo della CPU
    2) I/O in generale (specialmente su file)
    3) Networking in generale (socket, FTP, ecc...)
    4) Accesso ad un DB
    5) Generazione/trattamento di immagini

    Questi e qualunque altro "lavoro" in generale che terrebbe impegnato il EDT da qualche frazione di secondo in su (potenzialmente anche minuti o ore), vanno fatti in un thread separato, proprio per non impegnare il EDT.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2010
    Messaggi
    105
    1)Il programma invia tutti i dati riguardanti il file
    2)aspetta la conferma da parte del client che tutto è arrivato correttamente
    3)Viene chiamato il metodo sendFile che invia il file a pacchetti di 1024kb
    Nel metodo sendFile viene creata la finestra con la progress bar.
    Tutto avviene su un unico thread! Quindi cosa mi consigli di fare?

    Ps. Ho letto nella documentazione ke al posto della progress bar potrei usare la monitor bar..magari risolvo con quella il problema..appena posso la provo

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Cawletto
    1)Il programma invia tutti i dati riguardanti il file
    2)aspetta la conferma da parte del client che tutto è arrivato correttamente
    3)Viene chiamato il metodo sendFile che invia il file a pacchetti di 1024kb
    Nel metodo sendFile viene creata la finestra con la progress bar.
    Tutto avviene su un unico thread!
    Ma senza vedere esattamente il codice (o perlomeno le parti significative) comunque quello che dici .... dice poco.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.