Scorrere gli elementi di un ArrayList

di il
1 risposte

Scorrere gli elementi di un ArrayList

Salve a tutti.
Dunque io ho questo metodo:

 private ArrayList deliveryModule() {
        
    	ArrayList actions = new ArrayList();
        List results;
        int i=0;
        
        results = xmlData.getXPathContent("ActionPrint");
        if (results.size() > 0) {
        	for (i=0;i<results.size();i++){
            //System.out.println("[XMLController.deliveryModule] Stampante");
            myLog.info("Stampante");
            actions.add(new Stampante(this.xmlData, this.myLog, this.oSynchro));
            
           
        	}
        }
Il costruttore di stampante è fatto così:


   public Stampante(XMLData xml, Logger log, OOoSynchro oSyn) {
        this.xmlData = xml;
        this.oSynchro = oSyn;
        this.myLog = log;
        //this.fileToPrint = null;
    }
Poi successivamente ho un metodo che mi crea un file ed invoca altri 2 metodi getOptions e doAction

Iterator it = actions.iterator();
            while (it.hasNext()) {
                this.myAction = (Delivery)it.next();
                myAction.getOptions();
                myAction.doAction();
                
            }
che sono rispettivamente.

public void getOptions() throws DataException {
        
        List results;
        String[] data;
        
        
        results = xmlData.getXPathContent("PrintQueue");
        data = xmlData.getXPathValues(results);
        
        if (data.length == 0) {
            throw new DataException("[Stampante.getOptions] Non e` stata specificata nessuna coda di stampa");
        } else {
            this.printerName = data[0];
        }
        
        results = xmlData.getXPathContent("PrintCopies");
        data = xmlData.getXPathValues(results);
        
        if (data.length > 0) this.copies = new Integer(data[0]);
        
        results = xmlData.getXPathContent("PrintProgram");
        data = xmlData.getXPathValues(results);
        
        if (data.length > 0)  this.execProgram = data[0].toLowerCase();
        
        results = xmlData.getXPathContent("PrintPathFile");
        data = xmlData.getXPathValues(results);
        
        if (data.length > 0)  this.fileToPrint = data[0].toLowerCase();
    }

    public void doAction() throws DataException {
        
        String myExtension = xmlData.getEstensione()[0];
        
        //String myDocName = this.xmlData.getPathDoc() + this.xmlData.getNomeDoc() + "." + myExtension;
        String myDocName = this.fileToPrint+ "." + myExtension;
        System.out.println("Stampo il seguente file: "+ myDocName);
        if (myExtension.equals("sxw"))
            printSXW(myDocName);
        else if (execProgram != null)
            printWithExec(myDocName);
        else  {
            if (myExtension.equals("pdf")) printPS(myDocName);
            if (myExtension.equals("ps")) printPS(myDocName);
            
        }
    }
Il metodo che viene eseguito valutando l'if è printWithExec che è così.

    private void printWithExec(String docName) throws DataException  {
    	
    	System.out.println("[PRINT-WithExcec] Nome file da stampare = "+docName);
        
        ResourceBundle docOutBundle = ResourceBundle.getBundle("DocOutput");
        System.out.println("[execProgram] "+this.execProgram);
        String command = docOutBundle.getString(this.execProgram);
        System.out.println("[command] "+command);
        
        if (command.startsWith("C:\\")) {
            command =  "\"" + command +  docName +  "\" \"" + this.printerName + "\"";
            System.out.println("[command] "+command);
        } else {
            command = command.replaceAll("queue", this.printerName);
            command = command.replaceAll("InputFile", docName);
            System.out.println("[command] "+command);
        }
        myLog.info("COMANDO " + command);
        Runtime runtime = Runtime.getRuntime();
        
        try {
            Process process = runtime.exec(command);
            process.waitFor();
        } catch (Exception e) {
            throw new DataException(e.getMessage());
        }
        
    }
    
    private void printPS(String docName) throws DataException {
        
    	System.out.println("[PRINT-PS] Nome file da stampare = "+docName);
    	
Bene adesso che ho messo tutte le carte in tavola vi spiego il mio problema.
Il ciclo del primo metodo ArrayDelivery, mi conta quanti tag "ActionPrint" ho nel file xml che passo, e li memorizza in una lista.
Il mio problema è che esegue per n volte (quelle rilevate dal ciclo) le operazioni sempre sullo stesso <tag> e non mi considera i tag successivi.
Dove sbaglio?

Spero di aver spiegato abbastanza bene il problema e che mi possiate aiutare

Grazie

1 Risposte

  • Re: Scorrere gli elementi di un ArrayList

    Mi sono appena iscritto al forum..forse la risposta arriva tardi ma te la do comunque:
    un ArrayList non si scorre con un ciclo for ma bensì così
    ArrayList i= new ArrayList();
    while(i.hasMoreElements()){
            ........
            ........
            i=i.nextElements();
    }
    il metodo hasMoreElements() ti restituisce un boolean: true se ha ancora elementi falso altrimenti. Mentre il metodo nextElements() ti restituisce il prossimo elemento. Ovviamente c'è ne sono altri di metodi ma questo funziona bene.
    Spero si essere stato utile e scusa per il ritardo.
    Ciao
Devi accedere o registrarti per scrivere nel forum
1 risposte