Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet
Il nuovo Deebot X12 OmniCyclone abbina un sistema di raccolta dello sporco senza sacchetto, un rullo di lavaggio esteso e la tecnologia FocusJet per intervenire più efficacemente sulle macchie più persistenti. Un robot completo e preciso che aiuta a tenere puliti i pavimenti di casa con il minimo sforzo
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2: la pulizia di casa con un mocio a nastro
Narwal Flow 2 implementa un mocio a nastro che esegue una pulizia dettagliata del pavimento di casa, in abbinamento ad un potente motore di aspirazione della polvere: un prodotto ideale per gestire in autonomia e con grande efficacia le necessità di pulizia dei pavimenti di casa
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless
MSI FORGE GK600 TKL WIRELESS: switch lineari hot-swap, tripla connettività, display LCD e 5 strati di fonoassorbimento. Ottima in gaming, a 79,99 euro
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 21-04-2006, 17:54   #1
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
[java] spostare metodi

Ciao, vorrei spostare due metodi (guardainCassetta e prendiAttrezzi) dalla classe Operaio alla classe CassettaAttrezzi ,ma sto incontrando un problema, del tipo:

java.lang.NullPointerException
at com.officina.Operaio.riparaMacchina(Operaio.java:39)
at com.officina.Operaio.aggiusta(Operaio.java:96)
at com.officina.Operaio.run(Operaio.java:66)

come mai?

vi posto le due classi in origine e poi la mia soluzione (errata!)


origine :

Codice:
package com.officina;

import java.util.ArrayList;
import com.simulazione.Main;
import com.simulazione.GeneratoreDiGuasti;
import com.officina.StopWatch;

public class Operaio extends Thread{
    private Macchina vetturaDaRiparare;
    private CassettaAttrezzi cassettaAttrezzi;
    private Guasto guasto;
    private Officina officina;
    private ArrayList saccaAttrezzi;  
    private ArrayList attrezzicheck;
    static long tsimulato;
    static int lavori=0;
    static long TsMAX =0;
    static long TempoAttL;
    static long AttLMAX =0;
    private boolean hoAspettato;
    
    
     
    public Operaio(String nome, Officina officina) throws Exception{
        this.saccaAttrezzi = new ArrayList();
        this.setName(nome);
	this.officina = officina;
	this.cassettaAttrezzi = officina.prendiCassettaAttrezzi();
	this.hoAspettato = false;
	Main.log.writeINF("Creato meccanico <" + nome + ">");
    }
  
    public  boolean guardainCassetta(Macchina m) throws Exception{
        attrezzicheck = new ArrayList();
        guasto = m.analizzaMacchina();
     	for(int i = 0; i < guasto.decidiAttrezzi().length; i++){
            String nomeAttrezzo = guasto.decidiAttrezzi()[i];	
            attrezzicheck.add(nomeAttrezzo);
        }  
        return  cassettaAttrezzi.disponibilita(attrezzicheck);  
    }
 
    public  void prendiAttrezzi(ArrayList Attrezzicheck) throws Exception{
       
        for(int i = 0; i < Attrezzicheck.size(); i++){
            String nomeAttrezzo = (String)Attrezzicheck.get(i); 
            saccaAttrezzi.add(cassettaAttrezzi.prendiAttrezzo(nomeAttrezzo));} 
            Attrezzicheck.clear(); 
         }
    
    private void riparaMacchina() throws Exception {
        StopWatch timerAttesaLav= new StopWatch();
  	Main.log.writeINF("Meccanico <" + getName() 
	           + "> ripara <" + vetturaDaRiparare.getName() + ">"
	           + " con <" + guasto.datiGuasto() + ">");  
        timerAttesaLav.start();
        long lTmp = guasto.rilevaTempoRiparazione();
        Main.log.writeDBG("Meccanico <" + getName() + "> bloccato per <" 
                   + lTmp + ">   Minuti");   
        timerAttesaLav.stop();
        TempoAttL+= timerAttesaLav.getElapsedTime();
        if (timerAttesaLav.getElapsedTime()>AttLMAX){
            AttLMAX=timerAttesaLav.getElapsedTime();
        }
        sleep(lTmp);
        tsimulato+= lTmp;
        if (lTmp>TsMAX){
            TsMAX=lTmp;
       	}
    }
    
    public void run(){
        
        
        while(true){
            try {  
                if (!hoAspettato)   
                    vetturaDaRiparare = officina.prendiMacchinaDaRiparare();
                if (this.vetturaDaRiparare!=null){              
                    this.aggiusta();
        	}
               // yield();
                
            }
            catch (Exception e){
                e.printStackTrace();		
	    }
           
        }
        
    }
  
    private  void svuotaSacca(ArrayList sacca) throws Exception{                     
        for (int i = 0; i < sacca.size(); i++){
            Attrezzo attrezzo = (Attrezzo) sacca.get(i);
            cassettaAttrezzi.riponiAttrezzo(attrezzo);    
        } 
        sacca.clear();
    } 
  
    private  void aggiusta () throws Exception{
           
        
        if (this.guardainCassetta(vetturaDaRiparare)){	
            this.prendiAttrezzi(attrezzicheck); 
            if (this.hoAspettato){
                officina.setopInAttesa(false);
	        this.hoAspettato = false;
            }                                            
            this.riparaMacchina(); 
            this.svuotaSacca(saccaAttrezzi);                          
            officina.riponiMacchinaRiparata(vetturaDaRiparare); 
            lavori++;
            this.ScriviStatistiche();
        }                   
        else {
            this.hoAspettato = true;
	    officina.setopInAttesa(true);
        }
    }
  
    public void ScriviStatistiche() {
        if ((GeneratoreDiGuasti.timer.getElapsedTime()%20)==0 &&(lavori != lavori+1) ){                
            GeneratoreDiGuasti.timer.scriviTempoTot(); } 
    } 
}

Codice:
  package com.officina;

import java.util.ArrayList;
import com.simulazione.Main;

public class CassettaAttrezzi{
    private ArrayList attrezzi;
    static long TempoAtt; 
    private int z =1;        
    static long AttMAX =0;
    static long blocco=1;
    boolean trovato;
    
     public CassettaAttrezzi(){
    this.attrezzi = new ArrayList();
     
  } 
    
    public synchronized Attrezzo prendiAttrezzo(String nome) throws InterruptedException{
       StopWatch timerAttesa= new StopWatch();
        Main.log.writeDBG("Ho bisogno dell'attrezzo <" + nome + ">");    
        Attrezzo attrRet = null;
        while(attrRet == null){
            for (int i = 0; i < attrezzi.size(); i++){
                Attrezzo attrezzo = (Attrezzo) attrezzi.get(i);
                if (attrezzo.equals(nome)){
                    attrRet = (Attrezzo)attrezzi.remove(i);
                    Main.log.writeDBG("Recuperato attrezzo <" + attrRet.getName() + ">");    
                break;
                }
            }
           if (attrRet == null){
                timerAttesa.start();
                Main.log.writeDBG("IN ATTESAAAAAAAA DELL ' ATTREZZO <" + nome + ">");
                blocco++;
                
               wait();
                timerAttesa.stop();
                TempoAtt+= timerAttesa.getElapsedTime();
                if (timerAttesa.getElapsedTime()>AttMAX)
                   AttMAX=timerAttesa.getElapsedTime();
            }  
        }  
            return attrRet;
    }
  
    public synchronized void riponiAttrezzo(Attrezzo attrezzo){
        Main.log.writeDBG("Rilascio attrezzo <" + attrezzo.getName() + ">");	  
        attrezzi.add(attrezzo);
        notify();
    }  
  
    
   public synchronized boolean disponibilita (ArrayList listaAttrezzicheck) throws InterruptedException {
         
	for (int i =0;i<listaAttrezzicheck.size();i++)  
	{
	   String attrezzocheck = (String)listaAttrezzicheck.get(i);
	   boolean trovato = false;
           

	   for (int j=0; (!trovato) && j< attrezzi.size() ;j++)
	   {
	      Attrezzo attrezzocass = (Attrezzo) attrezzi.get(j);
	      if (attrezzocass.equals(attrezzocheck)) trovato = true;
	   }
	   if (!trovato) {
               Main.log.writeDBG("NO PUEDO TRABAHAR");
              wait();           
               
               return false ; 
               }
           
        }
           Main.log.writeINF ( " VEDO gli attrezzi in Cassetta -->   lavoro n° " +z++); //
        return true;
     }
            
      
}
mia soluzione sbagliata:

Codice:
package com.officina;

import java.util.ArrayList;
import com.simulazione.Main;
import com.simulazione.GeneratoreDiGuasti;
import com.officina.StopWatch;

public class Operaio extends Thread{
    private Macchina vetturaDaRiparare;
    private CassettaAttrezzi cassettaAttrezzi;
    private Guasto guasto;
    private Officina officina;
    private ArrayList saccaAttrezzi;  
    
    static long tsimulato;
    static int lavori=0;
    static long TsMAX =0;
    static long TempoAttL;
    static long AttLMAX =0;
    private boolean hoAspettato;
    
    
     
    public Operaio(String nome, Officina officina) throws Exception{
        this.saccaAttrezzi = new ArrayList();
        this.setName(nome);
	this.officina = officina;
	this.cassettaAttrezzi = officina.prendiCassettaAttrezzi();
	this.hoAspettato = false;
	Main.log.writeINF("Creato meccanico <" + nome + ">");
    }
  
  
 
   
    
    private void riparaMacchina() throws Exception {
        StopWatch timerAttesaLav= new StopWatch();
  	Main.log.writeINF("Meccanico <" + getName() 
	           + "> ripara <" + vetturaDaRiparare.getName() + ">"
	           + " con <" + guasto.datiGuasto() + ">");  
        timerAttesaLav.start();
        long lTmp = guasto.rilevaTempoRiparazione();
        Main.log.writeDBG("Meccanico <" + getName() + "> bloccato per <" 
                   + lTmp + ">   Minuti");   
        timerAttesaLav.stop();
        TempoAttL+= timerAttesaLav.getElapsedTime();
        if (timerAttesaLav.getElapsedTime()>AttLMAX){
            AttLMAX=timerAttesaLav.getElapsedTime();
        }
        sleep(lTmp);
        tsimulato+= lTmp;
        if (lTmp>TsMAX){
            TsMAX=lTmp;
       	}
    }
    
    public void run(){
        
        
        while(true){
            try {  
                if (!hoAspettato)   
                    vetturaDaRiparare = officina.prendiMacchinaDaRiparare();
                if (this.vetturaDaRiparare!=null){              
                    this.aggiusta();
        	}
               // yield();
                
            }
            catch (Exception e){
                e.printStackTrace();		
	    }
           
        }
        
    }
  
    private  void svuotaSacca(ArrayList sacca) throws Exception{                     
        for (int i = 0; i < sacca.size(); i++){
            Attrezzo attrezzo = (Attrezzo) sacca.get(i);
            cassettaAttrezzi.riponiAttrezzo(attrezzo);    
        } 
        sacca.clear();
    } 
  
    private  void aggiusta () throws Exception{
           
        
        if (cassettaAttrezzi.guardainCassetta(vetturaDaRiparare, guasto)){	
            cassettaAttrezzi.prendiAttrezzi(cassettaAttrezzi.prendiAttrezzicheck(), saccaAttrezzi); 
            if (this.hoAspettato){
                officina.setopInAttesa(false);
	        this.hoAspettato = false;
            }                                            
            this.riparaMacchina(); 
            this.svuotaSacca(saccaAttrezzi);                          
            officina.riponiMacchinaRiparata(vetturaDaRiparare); 
            lavori++;
            this.ScriviStatistiche();
        }                   
        else {
            this.hoAspettato = true;
	    officina.setopInAttesa(true);
        }
    }
  
    public void ScriviStatistiche() {
        if ((GeneratoreDiGuasti.timer.getElapsedTime()%20)==0 &&(lavori != lavori+1) ){                 
            GeneratoreDiGuasti.timer.scriviTempoTot(); } 
    } 
    
    
  
    
   
}

Codice:
 package com.officina;

import java.util.ArrayList;
import com.simulazione.Main;

public class CassettaAttrezzi{
    private ArrayList attrezzi;
    static long TempoAtt; 
    private int z =1;  
    private ArrayList attrezzicheck;
    static long AttMAX =0;
    static long blocco=1;
    boolean trovato; 
     public CassettaAttrezzi(){
    this.attrezzi = new ArrayList();
     
  } 
     
     public synchronized  boolean guardainCassetta(Macchina m, Guasto guasto) throws Exception{
        attrezzicheck = new ArrayList();
        guasto = m.analizzaMacchina();
     	for(int i = 0; i < guasto.decidiAttrezzi().length; i++){
            String nomeAttrezzo = guasto.decidiAttrezzi()[i];	
            attrezzicheck.add(nomeAttrezzo);
        }  
        return  this.disponibilita(attrezzicheck);  
    }
     
      public synchronized void prendiAttrezzi(ArrayList Attrezzicheck, ArrayList SaccaOperaio) throws Exception{
       
        for(int i = 0; i < Attrezzicheck.size(); i++){
            String nomeAttrezzo = (String)Attrezzicheck.get(i); 
            SaccaOperaio.add(this.prendiAttrezzo(nomeAttrezzo));} 
            Attrezzicheck.clear(); 
         }
     
    
    public synchronized Attrezzo prendiAttrezzo(String nome) throws InterruptedException{
       StopWatch timerAttesa= new StopWatch();
        Main.log.writeDBG("Ho bisogno dell'attrezzo <" + nome + ">");    
        Attrezzo attrRet = null;
        while(attrRet == null){
            for (int i = 0; i < attrezzi.size(); i++){
                Attrezzo attrezzo = (Attrezzo) attrezzi.get(i);
                if (attrezzo.equals(nome)){
                    attrRet = (Attrezzo)attrezzi.remove(i);
                    Main.log.writeDBG("Recuperato attrezzo <" + attrRet.getName() + ">");    
                break;
                }
            }
           if (attrRet == null){
                timerAttesa.start();
                Main.log.writeDBG("IN ATTESAAAAAAAA DELL ' ATTREZZO <" + nome + ">");
                blocco++;
                
               wait();
                timerAttesa.stop();
                TempoAtt+= timerAttesa.getElapsedTime();
                if (timerAttesa.getElapsedTime()>AttMAX)
                   AttMAX=timerAttesa.getElapsedTime();
            }  
        }  
            return attrRet;
    }
  
    public synchronized void riponiAttrezzo(Attrezzo attrezzo){
        Main.log.writeDBG("Rilascio attrezzo <" + attrezzo.getName() + ">");	  
        attrezzi.add(attrezzo);
        notify();
    }  
  
    
   public synchronized boolean disponibilita (ArrayList listaAttrezzicheck) throws InterruptedException {
        

	for (int i =0;i<listaAttrezzicheck.size();i++)  
	{
	   String attrezzocheck = (String)listaAttrezzicheck.get(i);
	   boolean trovato = false;
           

	   for (int j=0; (!trovato) && j< attrezzi.size() ;j++)
	   {
	      Attrezzo attrezzocass = (Attrezzo) attrezzi.get(j);
	      if (attrezzocass.equals(attrezzocheck)) trovato = true;
	   }
	   if (!trovato) {
               Main.log.writeDBG("NO PUEDO TRABAHAR");
              wait();
      
               return false ; 
               }
           
        }
           Main.log.writeINF ( " VEDO gli attrezzi in Cassetta -->   lavoro n° " +z++); //
        return true;
     }
   
     public ArrayList prendiAttrezzicheck(){
        return attrezzicheck;
    }
      
}
raniero è offline   Rispondi citando il messaggio o parte di esso
Old 21-04-2006, 20:27   #2
franksisca
Senior Member
 
L'Avatar di franksisca
 
Iscritto dal: May 2005
Città: Roma
Messaggi: 7938
guarda, se posti i sorgenti e ognuno li apre con il proprio editor è meglio, quindi fall, comunque l'errore è che fai la chiamata al metodo che tu hai spostato, quindi ho fai un "command", o fai un reindirizzamento del metodo.
__________________
My gaming placement
franksisca è offline   Rispondi citando il messaggio o parte di esso
Old 22-04-2006, 02:46   #3
raniero
Member
 
Iscritto dal: Sep 2005
Messaggi: 37
ecco i link ai file:

file originali:

Operaio.java

CassettaAttrezzi.java

file modificati:

Operaio(miemod).java

CassettaAttrezzi(mod).java


Grazie per l'interessamento.

Ultima modifica di raniero : 22-04-2006 alle 03:08.
raniero è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Ecovacs Deebot X12 OmniCyclone: lava grazie a FocusJet Ecovacs Deebot X12 OmniCyclone: lava grazie a Fo...
Narwal Flow 2: la pulizia di casa con un mocio a nastro Narwal Flow 2: la pulizia di casa con un mocio a...
Tastiera gaming MSI GK600 TKL: switch hot-swap, display LCD e tre modalità wireless Tastiera gaming MSI GK600 TKL: switch hot-swap, ...
DJI Osmo Pocket 4: la gimbal camera tascabile cresce e ha nuovi controlli fisici DJI Osmo Pocket 4: la gimbal camera tascabile cr...
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Ubuntu 26.04: le GPU guadagnano il 17% i...
La Commissione UE registra l'iniziativa ...
SSD troppo cari? La soluzione alla crisi...
Anteprima mondiale Hyundai IONIQ 3: segm...
Fintool sbarca su Microsoft 365: arrivan...
Hanno chiesto 1 dollaro per salvare un M...
Arriva AgentExchange, il marketplace di ...
Blizzard fa chiudere Turtle WoW: perché ...
Claude Desktop e la modifica silenziosa ...
Blue Origin ha mostrato gli interni del ...
Linux alla pari di Windows in gioco: con...
Il rientro del secondo stadio del razzo ...
Il controller ufficiale Microsoft per Xb...
DJI Power 1000 Mini: la power station da...
IT Wallet sempre più aperto: in a...
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: 17:19.


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