|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Jul 2011
Messaggi: 10
|
[JAVA] Problema test con i Thread
Dovrei testare con i thread un'applicazione che gestisce una tavola calda.
1 thread per crea 1 per deposita e 1 per eroga. il problema è che mi torna nullpointerException su questa istruzione if (mappaProdotti.get(k.toString())==null) quando faccio questo controlloreCorrente.deposita(id,10); vi prego, help me! Codice:
import java.io.File;
import javax.swing.JOptionPane;
public class ThreadInserisci implements Runnable {
private Acqua acqua;
private ControlloreGestione controlloreGestione;
private IDEsterno id;
private Orologio oggi;
private Controllore controlloreCorrente;
public ThreadInserisci(Controllore controllore, IDEsterno id){
new File("Ser").mkdir();
new File("Log").mkdir();
this.id = id;
this.controlloreCorrente=controllore;
this.acqua = acqua;
new Thread(this, "inserisci").start();
}
public void run(){
// codice del thread
try{
ControlloreGestione controlloreGestione = new ControlloreGestione();
//IDEsterno id = new IDEsterno("Ferrarelle");
//Acqua acqua = new Acqua(id);
controlloreGestione.nuovoProdotto("Acqua", id);
//IDEsterno articolo = new IDEsterno(iDEsternoProdotto.getText());
int giac= 0;
oggi=new Orologio();
SalvataggioVeloce salva = new SalvataggioVeloce();
// salva.salvaLog(articolo, oggi/*, ruolo, pass*/);
salva.salvaMenu(id, "Acqua");
salva.salvaLogErogaDeposita(id, oggi, "APPENA INSERITO", giac, "0");
}
catch(DirittiException e)
{
JOptionPane.showMessageDialog(null, " NuovoProdottoAA " + e.getMessage(), " non autorizzati", JOptionPane.ERROR_MESSAGE);
}
catch(ClasseAlimentareException e)
{
JOptionPane.showMessageDialog(null, " NuovoProdottoAA " + e.getMessage(), " Errore di tipo", JOptionPane.ERROR_MESSAGE);
}
catch(ProdottoException e)
{
JOptionPane.showMessageDialog(null, " NuiovoProdottoAA " + e.getMessage(), "Errore", JOptionPane.ERROR_MESSAGE);
}
catch (IDEsternoException e)
{
JOptionPane.showMessageDialog(null, e.getMessage(), "Errore", JOptionPane.ERROR_MESSAGE);
}
}
}
Codice:
import javax.swing.JOptionPane;
public class ThreadDeposita implements Runnable {
private Acqua acqua;
//private ControlloreDeposito controlloreDeposito;
private ControlloreGestione controlloreGestione;
private IDEsterno id;
private Orologio oggi;
private Controllore controlloreCorrente;
public ThreadDeposita(Controllore controllore, IDEsterno id){
//this.acqua = acqua;
this.id = id;
this.controlloreCorrente=controllore;
new Thread(this, "deposita").start();
}
public void run(){
// codice del thread
try
{
controlloreCorrente.deposita(id,10);
//ControlloreDeposito deposito = new ControlloreDeposito();
acqua.deposita(10);
int giac=acqua.giacenza();
// String ruolo=controlloreCorrente.utenteCorrente.getRuolo();
// String pass=controlloreCorrente.utenteCorrente.getPassword();
oggi=new Orologio();
SalvataggioVeloce salva = new SalvataggioVeloce();
salva.salvaLogErogaDeposita(id, oggi, "DEPOSITA", giac, Integer.toString(10));
}
catch (NumberFormatException e)
{
JOptionPane.showMessageDialog(null, " DepositaAA Numero non valido. ");
}
catch(ProdottoException e)
{
JOptionPane.showMessageDialog(null, " DepositaAA " + e.getMessage(), "Errore", JOptionPane.ERROR_MESSAGE);
}
catch (QuantitaException e)
{
JOptionPane.showMessageDialog(null, " DepositaAA Quantità non valida. ");
}
catch (IDEsternoException e)
{
JOptionPane.showMessageDialog(null, " DepositaAA Nome prodotto non non valido. ");
}
catch(DirittiException e)
{
JOptionPane.showMessageDialog(null, " DepositaAA " + e.getMessage(), "non autorizzato", JOptionPane.ERROR_MESSAGE);
}
}
}
Codice:
public void deposita(IDEsterno k, int quantita) throws DirittiException, ProdottoException, IDEsternoException, QuantitaException
{
if (k==null)
{
throw new IDEsternoException("L'identificatore del prodotto deve essere non nullo");
}
if (mappaProdotti.get(k.toString())==null)
{
throw new ProdottoException("Prodotti " + k.toString() + " non sono presenti");
}
else
{
if (quantita <=0) {
throw new QuantitaException ("La quantita da depositare deve essere positiva\n");
}
else
mappaProdotti.get(k.toString()).deposita(quantita);
}
}
|
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Ciao, dal codice che hai postato direi che se viene lanciata una NullPointerException in questa riga:
Codice:
if (mappaProdotti.get(k.toString())==null) 1) mappaProdotti è null 2) il tipo di mappa usato non permette elementi null e l'argomento passato k (IDEsterno) è null
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Nov 2004
Messaggi: 691
|
Anche se il tipo di mappa usato permettesse valori null, chiamare k.toString con k null darebbe comunque una nullPointerException. Tuttavia questo non può essere il caso, dato che c'è un if(k==null) prima dell'istruzione incriminata, quindi k non è null, quindi l'unica possibilità è che non hai inizializzato mappaProdotti a qualcosa che non sia null.
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
|
Yep, mi era sfuggito.
__________________
As long as you are basically literate in programming, you should be able to express any logical relationship you understand. If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it. (Chris Crawford) |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 16:28.




















