Newsgroup: it.comp.java
Titolo: Array

Voglio creare un array che venga condiviso da un thread e da un monitor,
dove lo devo dichiarare? Io l'ho dichiarato nel thread durante la
compilazione nessun errore, ma quando lo "lancio" mi viene visualizzato
questo messaggio:
java. lang.NullPointerException at Network.spedisci(Compiled code) at
Sender.run(Conpiled.Code)
Network č il monitor da me creato, spedisci č il metodo synchronized
invocato dal thread, sender č il thread.
Dove sbaglio? Ciao e grazie


il metodo spedisci tenta di accedere ad un elmento del vettore non
ancora allocato.
Guarda un po' te se vedi con quali operazioni accedi all'array ecerca
di capire perchè l'elemento non esiste in memoria.
+ di questo senza codice non posso dirti.
Cmq il problema non è di dichiarazione altrimenti l'errore sarebbe in
fase di compilazione,l'errore stà nel fatto che tenti di usare oggetti
non ancora istanziati.

 wrote in message
3c8e1699...@news.tin.it...

class Sender extends Thread {
  Network net;
  boolean nostop=true;
  int K=5
  int pacchetti[];
public Sender(Network net)
  { 
this.net
=net;
   }
public void run() {
  System.out.println("Crea l'array");
  int[] pacchetti = new int[K];
  System.out.println("Array creato");
  for (int i=0; i<K; i++)
     {  System.out.println("Entro nel ciclo for");
        net.spedisci(i);
        .......
       if (arrivatopacco<1000)    <----QUI NON CI ARRIVA MAI!
       {pacchetti[arrivatopacco]=1;
       .........
class Network {
 int pacchetti[];
 int K=5;
.....
public synchronized void spedisci(int i){
  { while(anet==false) { System.out.println("Sender aspetta");
    try { wait(); }catch (InterruptedException e) {}
                  }
    pacs=i;
    casuale=(int)(Math.random()*2);
   System.out.println("Casuale" +casuale);
    if(casuale==0)
                      System.out.println("Sender: casuale favorevole!");
                      System.out.println("Sender: pacchetto ok num"+i);
                      pacchetti[i]=1;    <--------IN QUESTO PUNTO MI CREA
L'ERRORE
                      anet=false;
                      dato=true;
                      presente=true;
                      .........
                      notifyAll();}
............
 }
}
...............
}
Dov'è che sbaglio? Ciao e Grazie.

 int pacchetti[];
e tre
hai dichiarato pacchetti tre volte,mentre dovresti farlo una vokta
sola
quindi int[] pacchetti = new int[K]; lo metti al posto del primo
int pacchetti[] e la terza dichiarazione eliminala proprio

 wrote in message
3c8e1de5...@news.tin.it...

Ho fatto come dicevi il problema è che ora quando compilo il Network mi
considera pacchetti come variabile sconosciuta...quindi? Come faccio a
dichiararlo?
Grazie

dichiararlo?
dalle parentesi mi era sembrato che Network fosse annidata in
sender,sbaglio?
Se non sbaglio allora la deve vedere per forza, se hai fatto come ti
ho detto.
An appunto per rispondere devi fare Re non  R, sennņ il nostro
discorso se ne va a spasso per il ng e non ci si capisce + niente
(scarica le patch per oe o usa un altro programma tipo FreeAgent)
Ciao Andrea 

 Ciao Andrea
La classe Network è un monitor che contiene i metodi synchronized invocati
dal sender, il sender invece è un thread che utilizza l'array così come
alcuni metodi synchronized definiti in monitor. Quindi l'array deve essere
accessibile sia dal sender che dal Network.
Per quanto riguarda FreeAgent provvederò ad installarlo al più presto.
Grazie del consiglio.
Ciao