Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347

    [Java] problema nella creazione di un thread

    ho un prolema con un thread e non riesco a capire da dove parta,deve essere un errore stupido perchè di solito uso sempre la stessa procedura per crearli e cioè: nella classe di interesse implemento runnable, poi nel costruttore di questa classe assegno "this" a una variabile thread, usando ovviamente il suo costruttore; tutto quello che devo fare lo scrivo nel metodo run.
    Quando però lo dovrei far partire in una classe a parte, questo mi da errore dicendo che il metodo start non esiste
    A questo punto mi è venuto un dubbio: non è che per caso un thread può essere fatto partire solo all'interno di un main??
    in ogni caso questo è il codice della prima classe:
    Codice PHP:
    package manifest;

    import java.io.File;
    import java.io.IOException;
    import java.nio.file.NoSuchFileException;
    import javax.swing.JFileChooser;
    import javax.swing.JOptionPane;
    import util.ExtensionFilter;

    public class 
    GeneratorStarter implements Runnable{
        
        private 
    Thread t;
        
        public 
    GeneratorStarter(int p){
            
    = new Thread(this);
            
    t.setPriority(p);
        }
        
        public 
    void run(){
            
    File file = new File("");
            
    JFileChooser chooser;
            try{
                
    chooser = new JFileChooser(new File("C:\\Users\\Hp\\Desktop\\workspace"));
            }catch(
    RuntimeException e){
                
    chooser = new JFileChooser(file.getAbsolutePath());
            }
            
    chooser.setFileFilter(new ExtensionFilter("java"));
            
    extLoop: for( ; ; ){
                
    int response chooser.showOpenDialog(null);
                if(
    response == JFileChooser.APPROVE_OPTION){
                    
    file chooser.getSelectedFile();
                    try{
                        
    ManifestGenerator gen = new ManifestGenerator(file);
                        
    gen.generate();
                    }catch(
    RuntimeException IOException e){
                        
    JOptionPane.showMessageDialog(null"Errore interno!");
                        
    e.printStackTrace();
                    }
                    
    JOptionPane.showMessageDialog(null"file creato");
                }else{
                    for( ; ; ){
                        
    int exit = JOptionPane.showConfirmDialog(null"Exit?""do you want to exit?"JOptionPane.YES_NO_OPTION);
                        if(exit == 
    JOptionPane.YES_OPTION)
                            
    System.exit(0);
                        else if(exit == 
    JOptionPane.NO_OPTION)
                            continue 
    extLoop;
                        else
                            
    JOptionPane.showMessageDialog(null"click only 'yes' or 'no' please!");
                    }
                }
                break;
            }
        }

    e questo è il metodo actionPerformed di una GUI che ho creato....
    Codice PHP:
        public void actionPerformed(ActionEvent e){
            if(
    e.getSource() == generator){
                
    gen = new GeneratorStarter(Thread.NORM_PRIORITY);
                
    gen.start();
            }
        } 

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    up

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2011
    Messaggi
    202
    non ho usato le GUI ho fatto programmazione con i thread a livello di socket C/S e con i middlewere, i thread startavano sempre in un main principale, ma questo perchè è il main che esegue il programma e se il programma deve eseguire processi leggeri (quali sono i thread) o qualunque altro tipo di operazione java che genera un'evento (quindi anche tipo int a=10+1; e poi visualizzi) deve avere sempre un main che li avvii, per intenderci dalle mie conoscenze un programma java per partire deve sempre avere un metodo statico main all'interno di una classe che risulta essere il file principale per l'esecuzione.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    mi chiedo se prima di fare up hai chiaro quale possa essere l'errore (o sai leggere i mex del compilatore).

    gen no ha il metodo start, ergo nella gerarchia dell'oggetto gen nessuno implementa start.

    Di fatto tu hai un oggetto di tipo runnable, che ha come metodo solo run, è la classe Thread che ha il metodo start (guardando le API te ne rendi conto).

    Ergo, se vuoi avviarla usa almeno

    codice:
    Thread t = new Thread (new GeneratoreStarter()); 
    t.start();
    anche se penso tu possa avere altri problemi
    RTFM Read That F*** Manual!!!

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2011
    Messaggi
    347
    no non ho chiaro quale possa essere l'errore! Per questo chiedo qui! Comunque grazie per la spiegazione, io avevo pensato stupidamente che assegnando this alla variabile di tipo thread, this stesso diventasse un thread.
    ps: @neidus ora che ho corretto il codice, l'esecuzione del thread parte anche dall'interno di una classe GUI

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.