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

    AIUTO thread java in applet

    Ciao ragazzi, ho bisogno di una mano!

    Devo creare un bottone stop che mi termini una serie di operazioni gravose per la cpu iniziate da un bottone start(e che quindi mi tengono bloccata la applet fino a quando non finiscono) nel momento in cui mi sono rotto di aspettare eheheh!!

    Devo creare un thread giusto?

    Come mai così non va bene?

    class applet extends applet{

    bla bla....

    Miothread mt = new MioThread();

    grafica iniziale in cui c'è il bottone STOP


    button start che esegue in actionperformed la gt.start();


    button stop = new Button("STOP");
    button.addactionListener(new ActionListener(){
    public actionPerformed(ActionEvent ae){
    mt.stop
    }
    }); // se non ricordo male la sintassi per roicevere l'evento!!

    bla bla...

    class MioThread extends Thread{

    public run(){
    particonleoperazionigravose();

    }
    }

    }

    Mi potreste dire cosa devo fareper implementare questo bottone STOP??

    Grazie!!
    Riccardo Daviddi

  2. #2
    non puoi con il metodo stop di un thread fermarne un altro, deve essere sempre lo stesso oggetto su cui fai start e stop

    se non sbaglio su fai gt.start() che fa le operazione gravose e poi il pulsante fa mt.stop()
    Mandrake 10.1; Gnome 2.6
    FireFox&Thunderbird make Internet better

  3. #3
    no no... ho sbagliato io!!!

    la start() è chiamata sullo stesso oggetto!!

    nelbottone START mt.start();

    e poi nel bottone STOP mt.stop();

    COme mai non funge??
    Riccardo Daviddi

  4. #4
    che jdk usi?

    sul 1.4.0 il metodo stop è deprecato, in compenso c'è interrupt()
    Mandrake 10.1; Gnome 2.6
    FireFox&Thunderbird make Internet better

  5. #5
    sì è vero ho provato anche interrupt()

    MA IL PROVBLEMA VERO è CHE IL PULSANTE STOP così costruendo il codice, non è disponibile (cliccabile) fino a quando le operazioni gravose dentro la classe MioThread non sono terminate! E quindi è inutile in quetsa maniera!!

    Grazie per le risposte già date, ne aspetto altre
    Riccardo Daviddi

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304

    Inviato da riccagt
    codice:
    class applet extends applet {
    Che vuol dire sta roba qua???


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    e' la classe principale:

    public class MiaApplet extends applet{

    dentro ci sta tutto quanto!

    }

    Sono veramente nel panico!!!
    Riccardo Daviddi

  8. #8
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Non capisco come mai il pulsante non sia disponibile finchè le operazioni del thread non sono concluse... i thread servono proprio a questo, a permettere la parallelizzazione delle operazioni in un processo.
    Non è che hai fatto qualche errore nell'implementazione? Magari hai costruito e/o visualizzato il pulsante DOPO la partenza del thread?

    La struttura dovrebbe essere grossomodo questa:
    codice:
    public class MiaApplet extends Applet {
       class MioThread extends Thread {
          ...
          public void run() { ... // Operazioni gravose }
          ...
       }
    
       ...
       private MioThread mt;
       private Button start;
       private Button stop;
       ...
    
       public void init() {
          ... // inizializzazioni
          start= new Button("START");
          start.addActionListener( new ActionListener() {
             public void actionPerformed(ActionEvent ae) { avviaThread(); }
          });
    
          stop= new Button("STOP");
          stop.addActionListener( new ActionListener() {
             public void actionPerformed(ActionEvent ae) { fermaThread(); }
          });
    
          mt = new MioThread();
          ...
          add(start);
          add(stop);
       }
    
       private void avviaThread() {
          mt.start();
       }
    
       private void fermaThread() {
          mt.interrupt();   // Oppure un metodo specifico
       }
    
       ...
    }
    In questo modo il pulsante dovrebbe essere disponibile fin da subito, anche prima di avviare il thread.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  9. #9
    Innanzi tutto ti ringrazio di cuore per la risposta datami, però io ho fatto esattamente quello che te hai scritto soltanto al posto della init() uso la start(), ma non cambia niente.

    Il pulsante lo disegno prima di iniziare il thread esattamente come fai te!

    Solo che se premo su start e partono le operazioni gravose che ad esempio durano 5 sec, per quei 5 sec non posso più fare nulla, se clicco su start o stop non clicca, o meglio, non clicca "istantaneamente", ma si "ricorda" che io ho cliccato su start o stop e quando sono finite le operazioni gravose parte l'azione legata al pulsante start o stop.

    In pratica non sono disponibili durante l'esecuzione del thread! Il che come dici te è assurdo perchè i thread sono fatti a posta!!

    Sto messo veramente male...questa cosa mi serve per domani pomeriggio e non so come fare....!!!
    Riccardo Daviddi

  10. #10
    Ma io nel run() del thread posso semplicemente chiamare una funzione che chiama altre e così via, naturalemente tutte funzioni all'interno del thread, in cui poi parte tutte il lavoro sulle operazioni gravose??

    Oppure va tutto implmentato dentro run()???
    Riccardo Daviddi

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 © 2024 vBulletin Solutions, Inc. All rights reserved.