Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-12-2002, 17:25   #1
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 336
Thread in Java

Ho implementato un programmino che mi copia i file da una cartella ad un'altra, facendo comparire una finestra con la percentuale dello stato dello spostamento.
Il problema e' che eseguendo il tutto in un'unico processo, la copia ciuccia tutte le risorse e non fa aggiornare la finestra con la percentuale (quasi non si vede),
e comunque non posso schiacciare il tasto annulla, perche' in fase di copia non riesce a sentire l'input.

Quindi ho pensato di avviare la copia in un thread a parte, in modo tale da permettere l'input (e quiindi poter annulare l'operazione di copia) e poter far aggiornare la finestra.

Il problema e che non so come fare (dovrei sapere quando la copia e' terminata, per poter avviare la copia di un altro file, e nel contempo rendere la finestra con la percentuale sensibile all'input, quindi non posso farci sopra una sleep)

Grazie
asdf è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2002, 18:08   #2
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Dai un'occhiata: http://www.pctuner.net/Software/Java/CercaFiles.zip
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 10-12-2002, 18:49   #3
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 336
Grazie, appena avro' un po' di tempo ci daro' un'occhiata
asdf è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2002, 09:43   #4
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Qualche dritta

Codice:
private Timer timer;
public final static int ONE_SECOND = 1000;

...

//Create a timer.
timer = new Timer(ONE_SECOND, new TimerListener());

...
class TimerListener implements ActionListener {
        public void actionPerformed(ActionEvent evt) {
            ....            
        }
    }


timer.start();
nell'actionPerformed puoi mettere il codice che vuoi venga eseguito ogni secondo...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2002, 17:09   #5
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Non ho capito bene se hai bisogno di un algoritmo per trasferire i file uno alla volta o se un codice di esempio per far funzionare e controllare un thread; nel dubbio allego un file di testo che contiene un esempio di entrambi.
Riassumendo, una volta ottenute le directory di partenza e destinazione, "infili" i file da trasferire in un array e poi esegui un ciclo, tramite un thread, trasferendo i file uno alla volta; alla pressione del tasto stop sulla finestra di dialogo il booleano "goOn" viene impostato a false e questo provoca l'uscita dal ciclo eseguito all'interno del metodo "run()" del thread.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2002, 17:14   #6
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
PGI...mi permetti un'osservazione simpatica??
Se tu risolvi sempre tutti i problemi di chi posta in questo modo, quando imparano (impariamo)?? Meglio dare delle dritte no??
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2002, 18:18   #7
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 336
Ri-Grazie.
Modifichero' l'esempio di PGI aggiungendoci il codice che mi serve

PS. Io la lettura del file la faccio tutta in una volta, diminuendo gli accessi al disco ed accelerando la velocita'.
Domani vi carichero' il codice (e' una riga, solo che ora non mi ricordo la sintassi precisa)
asdf è offline   Rispondi citando il messaggio o parte di esso
Old 11-12-2002, 21:05   #8
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Quote:
Originariamente inviato da cn73
[b]PGI...mi permetti un'osservazione simpatica??
Se tu risolvi sempre tutti i problemi di chi posta in questo modo, quando imparano (impariamo)?? Meglio dare delle dritte no??


Mannaggia ho appena risposto da un'altra parte!

Ti dirò che le mie intenzioni sono sempre del tipo "ti posto questo e poi discutiamo un po' su cosa e come" ma alla fine ci ritroviamo io e te a discutere nel thread di altri (cosa che a me fa piacere, ma sembriamo due virus che si infilano in ogni conversazione)

x asdf

Occhio che quel codice genera errori a tutto spiano appena incontra qualcosa che non sia un file leggbile.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 14-12-2002, 18:05   #9
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originally posted by "PGI"

Quote:
Originariamente inviato da cn73
[b]PGI...mi permetti un'osservazione simpatica??
Se tu risolvi sempre tutti i problemi di chi posta in questo modo, quando imparano (impariamo)?? Meglio dare delle dritte no??


Mannaggia ho appena risposto da un'altra parte!

Ti dirò che le mie intenzioni sono sempre del tipo "ti posto questo e poi discutiamo un po' su cosa e come" ma alla fine ci ritroviamo io e te a discutere nel thread di altri (cosa che a me fa piacere, ma sembriamo due virus che si infilano in ogni conversazione)

x asdf

Occhio che quel codice genera errori a tutto spiano appena incontra qualcosa che non sia un file leggbile.
eh eh...hai ragione...avessi + tempo!! Posso chiederti cosa fai nella vita, ti vedo molto, ma molto preparato sull'argomento Java...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 19-12-2002, 18:51   #10
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 336
Ieri finalmente ho trovato un po' di tempo da dedicare al mio programmino, e sono finalmente riuscito a fare il thread: ora la copia funziona che e' una meraviglia

Ps. ecco come copio io i file in una stringa

FileInputStream in = new FileInputStream(openList);
byte[] readFile=new byte[in.available()];
int totByteRead=in.read(readFile);
String tot=new String(readFile);
asdf è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 12:14   #11
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Meglio:

Codice:
  try 
    { 
      File fileInst = new File(nomeFile); 
      FileReader file = new FileReader(nomeFile); 
      char[] c = new char[(int)fileInst.length()]; 
      file.read(c); 
      String buffer = String.copyValueOf(c); 
      file.close(); 
    
    } 
    catch(Exception ex) 
    { 
       System.err.println("Exception raised by <getBuffer>: "+ex); 
     }
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 14:07   #12
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originally posted by "cn73"

Meglio:

Codice:
char[] c = new char[(int)fileInst.length()];



e' saggio se mettere un "if" sul quella fileInst.length()
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 14:40   #13
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
E perchè mai?
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 16:08   #14
DvL^Nemo
Senior Member
 
L'Avatar di DvL^Nemo
 
Iscritto dal: Nov 2001
Città: 100 metri dal mare
Messaggi: 4856
Se usi Swing devi avere la classe SwingWorker, leggiti i tutorial della SUN
A me era capitata una cosa del genere sull'esecuzioni di query pesanti su DB.. Con un thread a parte e la classe Swing Worker ho risolto il problema che se non erro e' simile al tuo..
Ciao !
__________________
TIM FTTC 200/20 LIVE SPEEDTEST
DvL^Nemo è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 16:13   #15
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originally posted by "DvL^Nemo"

Se usi Swing devi avere la classe SwingWorker, leggiti i tutorial della SUN
A me era capitata una cosa del genere sull'esecuzioni di query pesanti su DB.. Con un thread a parte e la classe Swing Worker ho risolto il problema che se non erro e' simile al tuo..
Ciao !
E infatti + presente nell'esempo che gli indicavo sopra...cmq se non lo avesse letto, lo riporto:

Codice:
package cercafiles;

import javax.swing.SwingUtilities;

/**
 * This is the 3rd version of SwingWorker (also known as
 * SwingWorker 3), an abstract class that you subclass to
 * perform GUI-related work in a dedicated thread.  For
 * instructions on using this class, see:
 * 
 * http://java.sun.com/docs/books/tutorial/uiswing/misc/threads.html
 *
 * Note that the API changed slightly in the 3rd version:
 * You must now invoke start() on the SwingWorker after
 * creating it.
 */
public abstract class SwingWorker {
    private Object value;  // see getValue(), setValue()
    private Thread thread;

    /** 
     * Class to maintain reference to current worker thread
     * under separate synchronization control.
     */
    private static class ThreadVar {
        private Thread thread;
        ThreadVar(Thread t) { thread = t; }
        synchronized Thread get() { return thread; }
        synchronized void clear() { thread = null; }
    }

    private ThreadVar threadVar;

    /** 
     * Get the value produced by the worker thread, or null if it 
     * hasn't been constructed yet.
     */
    protected synchronized Object getValue() { 
        return value; 
    }

    /** 
     * Set the value produced by worker thread 
     */
    private synchronized void setValue(Object x) { 
        value = x; 
    }

    /** 
     * Compute the value to be returned by the <code>get</code> method. 
     */
    public abstract Object construct();

    /**
     * Called on the event dispatching thread (not on the worker thread)
     * after the <code>construct</code> method has returned.
     */
    public void finished() {
    }

    /**
     * A new method that interrupts the worker thread.  Call this method
     * to force the worker to stop what it's doing.
     */
    public void interrupt() {
        Thread t = threadVar.get();
        if (t != null) {
            t.interrupt();
        }
        threadVar.clear();
    }

    /**
     * Return the value created by the <code>construct</code> method.  
     * Returns null if either the constructing thread or the current
     * thread was interrupted before a value was produced.
     * 
     * @return the value created by the <code>construct</code> method
     */
    public Object get() {
        while (true) {  
            Thread t = threadVar.get();
            if (t == null) {
                return getValue();
            }
            try {
                t.join();
            }
            catch (InterruptedException e) {
                Thread.currentThread().interrupt(); // propagate
                return null;
            }
        }
    }


    /**
     * Start a thread that will call the <code>construct</code> method
     * and then exit.
     */
    public SwingWorker() {
        final Runnable doFinished = new Runnable() {
           public void run() { finished(); }
        };

        Runnable doConstruct = new Runnable() { 
            public void run() {
                try {
                    setValue(construct());
                }
                finally {
                    threadVar.clear();
                }

                SwingUtilities.invokeLater(doFinished);
            }
        };

        Thread t = new Thread(doConstruct);
        threadVar = new ThreadVar(t);
    }

    /**
     * Start the worker thread.
     */
    public void start() {
        Thread t = threadVar.get();
        if (t != null) {
            t.start();
        }
    }
}
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 16:17   #16
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originally posted by "cn73"

E perchè mai?


se e' un file di 500 mega pensi di copiarlo tutto in un aray e poi riscriverlo?
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 16:38   #17
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originally posted by "kingv"

Quote:
Originariamente inviato da cn73
E perchè mai?


se e' un file di 500 mega pensi di copiarlo tutto in un aray e poi riscriverlo?
Non per nulla è messo in un try catch...Solitamente il programmatore non deve preoccuparsi della memoria: Ha a disposizione uno spazio di indirizzi, poi è il Sistema Operativo che so occupa di gestirlo e distribuirlo fra memoria reale e virtuale...
Un'altra cosa poi è ottimizzare...
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 17:18   #18
cionci
Senior Member
 
L'Avatar di cionci
 
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
Solitamente si utilizza comunque un buffer di dimensione fissa... Swappare la memoria fisica su disco è un lavoro molto dispendioso per il sistema opertivo...
Ti ritroveresti con il tuo programma che occupa 500 Mb e tutti glia ltri progammi dovrebbero essere swappati... Pensa poi se la memroia fisica fosse 128 Mb... In quel caso sai quanto swap !!!
cionci è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 18:50   #19
kingv
Senior Member
 
L'Avatar di kingv
 
Iscritto dal: Jan 2001
Città: Milano
Messaggi: 5707
Quote:
Originally posted by "cn73"

Quote:
Originariamente inviato da kingv
Quote:
Originariamente inviato da cn73
E perchè mai?


se e' un file di 500 mega pensi di copiarlo tutto in un aray e poi riscriverlo?
Non per nulla è messo in un try catch...Solitamente il programmatore non deve preoccuparsi della memoria: Ha a disposizione uno spazio di indirizzi, poi è il Sistema Operativo che so occupa di gestirlo e distribuirlo fra memoria reale e virtuale...
Un'altra cosa poi è ottimizzare...
se non ti preoccupi della memoria e fai fare tutto a jvm e sistema operativo dopo due giorni fai parte della schiera di quelli che dicono che java e' lento (tipo cionci ).

il problema cui mi riferivo cmq non era questo, se bufferizzi il tutto porti a termine la copia anche se il file e' di 1 giga, se il tuo programma va in OutOfMemoryError o simili verosimilmente no. E in ogni caso usare il try e catch come gestione dei problemi applicativi (come ad esempio un file troppo grosso per stare in memoria) e' sintomo di programmazione scadente...
kingv è offline   Rispondi citando il messaggio o parte di esso
Old 20-12-2002, 20:41   #20
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Non per niente ho specificato che l'ottimizzazione di un programma è un'altra cosa...parli con uno che deve preoccuparsi di implementare un metodi dispose per ogni classe grafica pena un decadimento prestazionale intollerabile... e che mette a null tutte le variabili prima di uscire da un metodo perchè come saprai avolterimangono dei riferimenti a un oggetto di una classe e questo impedisce al garbadge collector di liberare le risorse...

Le scelte implementative dipendono dal tipo di programma che uno deve realizzare... Allora lo stesso discorso vale sempre: qualunque struttura o tipo o classe tu usi, se devi trattare un file di 100 terabyte ti voglio vedere...
cn73 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Meta lavora a un sistema di riconoscimen...
Il mercato smartphone potrebbe registrar...
Apple punterà sull'architettura c...
NASA Curiosity: i processi non biologici...
Sega conferma l'arrivo di tanti nuovi gi...
La serie POCO X8 è pronta al debu...
Apple conferma che l'arrivo della 'nuova...
Le vendite di Square Enix sono in netto ...
iPhone 17e si mostra in un video 'first ...
Il nuovo Xiaomi Watch 5 è pronto ...
Steam Deck è out of stock in dive...
Le migliori offerte Amazon del weekend, ...
PC più potente, meno spesa: su Amazon ta...
Amazon Haul: come fare acquisti 'pazzi' ...
Threads permetterà agli utenti di...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 04:46.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v