Newsgroup: it.comp.java
Titolo: Aiutatemi a capire quest'errore,please....

Salve,
Sto cercando di implementare un Timer,ma non capisco dove sbaglio....
Ecco il codice:
public class Task extends TimerTask
   {
    public void run()
    {
      ........
    }
}
 public static void main(String[] args) throws Exception
   {
      .......
      Timer price=new Timer();
      price.ScheduleAtFixedRate(new Task(),new Date(),priceRate);
      .......
  }
Il compilatore mi da questo errore:
non-static variable this cannot be referenced from a static context
    price.ScheduleAtFixedRate(new Task(),new Date(),priceRate);
                                                 ^
la dicitura dell'errore mi sembra chiara,il this non si puo usare in
un contesto statico come il main,ma dove sta' questo riferimento al
this quando faccio new Task() ?
Bye,
       Bigstar.

 wrote in message
DPQ98.77$Jo....@twister2.libero.it...


 this quando faccio new Task() ?
Non sta li', ma da dove arriva "priceRate"? ;-) 
Ammenoche' il tuo TimerTask non sia inner alla classe che contiene il main.
-- 
Life's something u don't get out alive..
ObjectZone - 
http://space.tin.it/computer/csadun

 Ammenoche' il tuo TimerTask non sia inner alla classe che contiene il
main.
Ehm non sono sicuro di aver capito(neofita sono),ma credo che non sia quello
il problema...allora,il codice e' tutto in un file di nome Test,la struttura
completa e' questa:
public class Test
 {
   static long priceRate=30000;
   .....
  public class Task extends TimerTask
   {
    public void run()
    {
      ........
    }
    }
 public static void main(String[] args) throws Exception
   {
      .......
      Timer price=new Timer();
      price.scheduleAtFixedRate(new Task(),new Date(),priceRate);
      .......
  }
}
Come prova ho anche sostituito la riga con
price.schedule(new Task(),newDate())
e mi da lo stesso unico errore,quindi non dipende dal priceRate...
Bye,
       Bigastar.

 wrote in message
WWU98.1748$Jo.3...@twister2.libero.it...


     price.ScheduleAtFixedRate(new Task(),new Date(),priceRate);
L'errore te lo dice lo stesso compilatore.
Non puoi utilizzare istanze/variabili non statiche in metodi statici.
Prova a portare il codice fuori dal metodo main e vedi che lo stesso codice
dovrebbe funzionare.
Nel main oltre a (new NomeCostruttore(Parametri seCiSono)).setVisible(true);
//Quando è un Frame/JFrame
non dovrebbe starci.

 //Quando č un Frame/JFrame non dovrebbe starci.
Grazie,come puoi leggere dall'altro messaggio ho risolto...pero' mi hai
fatto venire un'altra curiosita',a che serve il metodo setVisible?
Non sono riuscito a rintracciarlo nella documentazione...
Bye,
       Bigstar.


Grazie mille,il tuo intervento mi ha fatto decidere a rileggermi il capitolo
sulle classi annidate del mitico thinking in java,evidentemente la prima
volta ero stato troppo veloce! ;-)
Comunque alla fine ho deciso di rendere statica la Task e lasciarla in
Test,in quanto deve accedere a metodi e variabili posti sempre in Test.
Bye,
       Bigstar.

Il metodo setVisible(boolean visible); è specifico dei Component/JComponent,
quindi di tutti gli oggetti grafici.
Serve a rendere visibile a video o invisibile (dipende dal buleano) un
oggetto appunto grafico che discende da Component/JComponent.
Questo che ti allego è un codice di esempio funzionante.
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
public class UnaBellaFinestrona extends JFrame
{
    public UnaBellaFinestrona()
    {
        super();
        setSize(320,200);
        // Il metodo super(eventuali parametri); richiama il costruttore
della classe padre
        addWindowListener(new WindowAdapter()
        {
        // aggiungo l'ascoltatore degli eventi gen erati dalla finestra
              public void windowClosing(WindowEvent e)
              {
                    // se premi sulla X per la chiusura
                    System.exit(0);
                    // Chiudi l'applicazione
              }
        });
    }
    public static void main(String args[])
    {
        (new UnaBellaFinestrona()).setVisible(true);
        // Istanzio la classe e la visualizzo
    }
}