Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico
Nothing Phone (4a) Pro cambia pelle: l'alluminio unibody sostituisce la trasparenza integrale, portando una solidità inedita. Sotto il cofano troviamo uno Snapdragon 7 Gen 4 che spinge forte, mentre il display è quasi da top dig amma. Con un teleobiettivo 3.5x e la Glyph Matrix evoluta, è la prova di maturità di Carl Pei. C'è qualche compromesso, ma a 499EUR la sostanza hardware e la sua unicità lo rendono un buon "flagship killer" in salsa 2026
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro
Con Midnight, Blizzard tenta il colpaccio: il player housing sbarca finalmente su Azeroth insieme a una Quel'Thalas ricostruita da zero. Tra il dramma della famiglia Ventolesto e il nuovo Prey System, ecco com'è la nuova espansione di World of Warcraft
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato
Nuova frontiera per i robot tagliaerba, con Ecovacs GOAT O1200 LiDAR Pro che riconosce l'ambiente in maniera perfetta, grazie a due sensori LiDAR, e dopo la falciatura può anche rifinire il bordo con il tagliabordi a filo integrato
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 10-12-2002, 16:25   #1
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 340
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, 17: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, 17:49   #3
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 340
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, 08: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, 16: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, 16: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, 17:18   #7
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 340
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, 20: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, 17: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, 17:51   #10
asdf
Senior Member
 
Iscritto dal: Jul 2002
Messaggi: 340
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, 11: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, 13: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, 13: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, 15: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, 15: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, 15: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, 15: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, 16: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, 17: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, 19: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


Recensione Nothing Phone (4a) Pro: finalmente in alluminio, ma dal design sempre unico Recensione Nothing Phone (4a) Pro: finalmente in...
WoW: Midnight, Blizzard mette il primo, storico mattone per l'housing e molto altro WoW: Midnight, Blizzard mette il primo, storico ...
Ecovacs Goat O1200 LiDAR Pro: la prova del robot tagliaerba con tagliabordi integrato Ecovacs Goat O1200 LiDAR Pro: la prova del robot...
Recensione Samsung Galaxy S26+: sfida l'Ultra, ma ha senso di esistere? Recensione Samsung Galaxy S26+: sfida l'Ultra, m...
Zeekr X e 7X provate: prezzi, autonomia fino a 615 km e ricarica in 13 minuti Zeekr X e 7X provate: prezzi, autonomia fino a 6...
Attacco a Magento: ecco come un'immagine...
Un nuovo State of Play potrebbe arrivare...
App IO e IT-Wallet: i 14enni potranno ac...
No Man's Sky introduce la Xeno Arena: un...
Distributed AI Hub: l'infrastruttura IA ...
MOUSE: P.I. For Hire mostra il suo lato ...
La doppia sentenza che complica il caso ...
Microsoft ce l'ha fatta! Windows 11 ha u...
Top 7 Amazon di oggi: crolla del 54% il ...
La Terra va verso gli 11,7 miliardi di a...
NVIDIA ribilancia la roadmap? Meno Hoppe...
Rimborso Netflix fino a 500 euro, come p...
DENZA debutta in Europa: Z9GT e D9 porta...
Steam potrebbe presto integrare un siste...
Claude Managed Agents in public beta: ad...
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: 13:08.


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