Newsgroup: it.comp.java
Titolo: Classi e metodi (ma gli oggetti non vengono passati per riferimento?)

Salve a tutti, cortesemente potete aiutarmi a capire quale errore commetto ?
Ma gli oggetti in java non vengono passati per riferimento?
ho due classi A e B, com'è possibile che un metodo della classe A lanciato 
dal main della classe A venga eseguito correttamente, ed invece lo stesso 
metodo lanciato a seguito di un evento non venga eseguito correttamente ?(o 
meglio , non nella stessa maniera)
il problema che riscontro è il seguente :
La JProgressBar viene visulizzata correttamente (e si aggiorna 
correttamente )se richiamata nel metodo main [ frame.test(); ]
al contrario non si aggiorna se premendo il pulsante ( richiamo lo stesso 
metodo ma da un'altra classe)
Sicuramente c'è qualcosa che mi sfugge ..... ma non riesco a capire cosa !!!
A dir la verità qualche giorno fà avevo postato già qualcosa ma 
sfortunatamente nessuno mi ha risposto , non vorrei sembrare pedulante ... 
ma questa cosa mi stà mandando al manicomio ... :-)
... anche perchè non saprei a chi altro chiedere..... :-)
per quanti coloro mi volessero aiutare allego il codice in oggetto.
----------------------------------------- inizio classe A
// file A.java
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class A extends JFrame implements ActionListener {
 JButton invia ;
 JPanel pane ;
 JProgressBar progressBar ;
    ExitWindow exit = new ExitWindow();
    public A()
    {
        setSize(260, 150);
        setResizable(false);
        invia = new JButton("Invia");
        pane = new JPanel();
        progressBar = new JProgressBar();
        //progressBar.setIndeterminate(true);
        addWindowListener(exit);
        invia.addActionListener(this);
  pane.add(invia);
  progressBar.setStringPainted(true);
  pane.add(progressBar);
  setContentPane(pane);
    }
public void test(){
  this.progressBar.setMaximum(100);
  this.progressBar.setMinimum(0);
  for(int i=0;i<101;i++){
  this.progressBar.setValue(i);
  System.out.println(i);
  try {
    Thread.sleep(10);
    }
   catch(Exception e){}
  }
}
 public void actionPerformed(ActionEvent evt){
   Object source = evt.getSource();
   if (source ==invia) {
   B b = new B();
   b.aggiorna(this);
   }
 }
     public static void main(String[] arguments)   {
  A frame = new A();
  frame.show();
  //frame.test();
  }
}
--------------------------------------------------------- fine classe A
--------------------------------------------------------- inizio classe B
// file B.java
public class B {
 public  void aggiorna(A a)
 {
  System.out.println("B(A a)");
  a.test();
 }
}
-------------------------------------------------------- fine classe B
vi ringrazio anticipatamente per la disponibilità
saluti Rob 

Non è che non funziona, ma premendo il pulsante lanci un solo Thread
(il fatto che usi Thread.sleep() non importa). La bar si aggiorna ma tu
te ne accorgi solo alla fine del Thread e quindi vedi la bar tutta
aggiornata

quindi un .yield() dovrebbe sistemare le cose? Chiedo perchè avrò
anch'io un problema del genere ....
/**
 * Causes the currently executing thread object to temporarily pause
 * and allow other threads to execute.
 */
 public static native void yield();
grazie

aggiornata
e per "accorgemene" cosa dovrei fare ?  :-)
saluti Rob

Per "accorgertene" devi far girare l'aggiornamento della barra in un 
thread diverso di quello che la visualizza, e quindi dem main che ti 
apre il frame in visualizzazione
Cappuccetto Rosso ha scritto:


Grazie , tutto OK
č qualche anno che non lavoro piů con java .... incredibile come si 
dimentica tutto :-)
salutissimi rob 


Ovviamente no