Newsgroup: it.comp.java
Titolo: AWT: Spostare istruzioni fuori da "main"

Ho un problema con AWT (credo che lo stesso problema si presenti con
Swing).
Se digito il seguente programma il Frame viene visualizzato
package esempio38;
import java.awt.*;
import java.awt.event.*;
public class Esempio38
{
 public static void main(String[] args)
 {
  Frame f=new Frame("Frame di prova");
  Panel p=new Panel();
  Button b1=new Button("Bottone 1");
  Button b2=new Button("Bottone 2");
  Button b3=new Button("Bottone 3");
  p.add(b1); p.add(b2); p.add(b3);
  f.add(p);
  f.pack();
  f.setVisible(true);
 }
}
Se pero' sposto le istruzioni fuori del metodo "main" (come qui sotto)
il programma NON funziona piu', QUALCUNO SA' IL PERCHE?
Il messaggio che appare e' il seguente:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
package esempio38;
import java.awt.*;
import java.awt.event.*;
public class Esempio38
{
 public static void main(String[] args)
 {
  ProvaGUI ogg=new ProvaGUI();
 }
}
class ProvaGUI
{
 Frame f=new Frame("Frame di prova");
 Panel p=new Panel();
 Button b1=new Button("Bottone 1");
 Button b2=new Button("Bottone 2");
 Button b3=new Button("Bottone 3");
 p.add(b1); p.add(b2); p.add(b3);
 f.add(p);
 f.pack();
 f.setVisible(true);
}

 }
OMMIODDIO!!!!! Ma che schifezza è questa????
Anche io all'inizio, quando ero veramente niubbo facevo delle vaccate
ma mai a questo livello!!!!
Non ti è "sfuggito" nulla nel codice???
tu nel main richiami un costruttore che non hai implementato (ma che
viene implementato di default dal compilatore) peccato che le
istruzioni ch ehai scritto dentro a ProvaGui debbano essere inserite
nel costruttore o alla peggio in un metodo che dovrà essere invocato
dal costruttore...
Tutti possiamo sbagliare, non lo nego. Ma almeno quando CERCHI di
programmare (che nel tuo caso sembra + uno smanettare....) verifica
che non sia acceso solo il pc ma anche il cervello...
cmq visto i tuoi post precedenti PRIMA DI PASSARE AD AWT O SWING
IMPARATI LE BASI DEL LINGUAGGIO
Marco

OMMIODDIO!!!!! Ma che schifezza è questa????
Anche io all'inizio, quando ero veramente niubbo facevo delle vaccate
ma mai a questo livello!!!!
Non ti è "sfuggito" nulla nel codice???
tu nel main richiami un costruttore che non hai implementato (ma che
viene implementato di default dal compilatore) peccato che le
istruzioni ch ehai scritto dentro a ProvaGui debbano essere inserite
nel costruttore o alla peggio in un metodo che dovrà essere invocato
dal costruttore...
Tutti possiamo sbagliare, non lo nego. Ma almeno quando CERCHI di
programmare (che nel tuo caso sembra + uno smanettare....) verifica
che non sia acceso solo il pc ma anche il cervello...
cmq visto i tuoi post precedenti PRIMA DI PASSARE AD AWT O SWING
IMPARATI LE BASI DEL LINGUAGGIO
Marco
Grazie della risposta ma NON IMPORTA OFFENDERE.
Riguardo alle basi del linguaggio ho FINITO di leggere il libro sui
fondamenti di programmazione in Java.
Sul libro c'e' un capito che tratta delle GUI e delle Applet ma NON
c'e' scritto niente riguardo questo discorso del costruttore,
per favore puoi dirmi PERCHE' le istruzioni relative alla GUI devono
essere contenute in un costruttore?

 essere contenute in un costruttore?
quando fai new Qualchecosa(...);
chiami le funzioni che sono all'interno del costruttore, quindi avresti 
dovuto fare:
class ProvaGUI {
   public ProvaGUI() {
      codice java
   }
}
Il codice come l'hai messo tu non può essere richiamato e credo che 
neanche compili...
Io sono l'ultima persona che può parlare, però queste sono proprio le 
basi della programmazione Java, e come ti è stato detto, provare a fare 
della grafica quando ancora non padroneggi i costruttori è come volere 
attraversare l'atlantico a nuoto e non aver mai nuotato senza bracioli.
Paolo

 il programma NON funziona piu', QUALCUNO SA' IL PERCHE?
perchè hai scritto il codice nel corpo della classe, e questo lo sanno
anche i pinguini della patagonia che non va bene. mentre i macachi del
borneo non lo sanno, però almeno leggono gli errori del compilatore
prima di andare per newsgroup a fare figure da pellai.

 Paolo
Non ci avevo pensato, e' stato un errore di distrazione, scusate.


Sinceramente credo che gli unici a doversi scusare siano
Marco Capoferri e rootkit.
Che maleducazione irritante!

 Che maleducazione irritante!
io sono dell'idea che i newsgroup tecnici non vanno usati ne per il
personal training e ne per il personal debugging.
giustamente, se c'è un problema si può venire qui a discuterne, ma
questo problema non può essere che di java non se ne sa un fico secco
perché non c'è nulla da discutere se non ripetere cose che sono
spiegate molto meglio in altri posti.


Forse hai ragione nel dire che bisognerebbe cercare altrove pima di
chiedere aiuto qui. Non e' giusto pretendere aiuto dalle persone senza
impegnarsi un minimo a risolvere il problema da soli. Rispetto la tua
posizione. Pero', visto che il mondo reale fa gia' abbastanza schifo,
perche' dobbiamo rendere un posto brutto anche questo posto virtuale
che e' il NG con inutile violenza verbale? E non mi riferisco tanto a
te quanto a
Marco Capoferri.
Vedo che posti spesso qui e capisco che certi post tipo quello di
bracco baldo ti diano un po' fastidio ma io, e credo molti altri,
apprezzerebbero un comportamento meno aggrssivo in futuro.
Ora la smetto di andare OT.
pace
gm

il problema non è la maleducazione o cos'altro.
Hai mai letto gli altri post di bracco baldo? se no dacci un pò un
occhiata, moltissime cose sono fuori dalla logica (esempio vedi
discussione generics).
Non puoi chiedermi come si implementa una classe che usa i generics,
dopo averne riportata una come esempio!!!
Non sarò stato gentile ma credo che in certi casi un "insulto"o cmq
far notare pesantemente di aver tatto una "figura da orso del kispios"
aiutino a spronare una persona per farle fare di meglio.
e cmq cosa che credo FONDAMENTALE è ch eper imparare un linguaggio di
programmazione (Java, C, C++, Lisp, Prolog o quello che vuoi) non
basta leggersi un libro. Si deve anche capire che cosa si ha letto e
cosa ancora + importante scrivere qualche migliaio di righe di codice
per dimostrare di aver imparato.
E se le basi non le hai è inutile che prosegui ai passi successivi.
non puoi saltare in sella ad una MotoGP se hai sempre guidato solo una
bicicletta....
Io è da un pò che non seguo molto l'attività del forum perchè
l'università mi toglie un botto di tempo, ma per lo meno non ho mai
avuto la faccia tosto di chiedere al ng delle risposte ad un problema
nascondendo che era un esercizio da presentare a qualche esame, o di
chiedere spiegazioni se non dopo aver chiesto al caro amico google o
alla zia Sun.
Ciao

> Io è da un pò che non seguo molto l'attività del forum perchè
Newsgroup scusate l'errore

 Newsgroup scusate l'errore
Eh no, errore gravissimo e imperdonabile! 
Ora ti cazziamo pesantemente :D
Saluti
CarMas

 Ora ti cazziamo pesantemente :D
il cazziatone per fare meglio ci stà sempre, anche quando non si
sbaglia.
Si può sempre fare di meglio
Ciao

 essere contenute in un costruttore?
cfr qualsiasi libro di java.
Ciao Jack

 essere contenute in un costruttore?
No, le istruzioni relative alla GUI non devono essere inserite 
necessariamente nel costruttore, ma:
1) nel costruttore
2) in un metodo che venga esplicitamente richiamato.
Assolutamente mai, come fai tu, semplicemente sparse all'interno della 
classe.
Siccome tu nel main hai solo ProvaGUI ogg=new ProvaGUI(); (e, 
d'altronde, non hai definito nessun metodo nè il costruttore nella 
classe ProvaGUI), le tue istruzioni (supponendo che il compilatore le 
permetta) non vengolo eseguite. Due strade:
1) scrivere all'interno della classe ProvaGUI il costruttore, per esempio:
class ProvaGUI
  {
   public ProvaGUI()
    {
     Frame f=new Frame("Frame di prova");
     Panel p=new Panel();
     Button b1=new Button("Bottone 1");
     Button b2=new Button("Bottone 2");
     Button b3=new Button("Bottone 3");
     p.add(b1); p.add(b2); p.add(b3);
     f.add(p);
     f.pack();
     f.setVisible(true);
    }
  }
2) spostare all0interno di un metodo una o più istruzioni, per esempio:
class ProvaGUI
  {
   private Frame f;
   public void visualizza()
    {
     f.pack();
     f.setVisible(true);
    }
   public ProvaGUI()
    {
     f=new Frame("Frame di prova");
     Panel p=new Panel();
     Button b1=new Button("Bottone 1");
     Button b2=new Button("Bottone 2");
     Button b3=new Button("Bottone 3");
     p.add(b1); p.add(b2); p.add(b3);
     f.add(p);
    }
  }
nel secondo caso, però, nel main, dopo
ProvaGUI ogg=new ProvaGUI();
devi aggiungere la riga
ogg.visualizza();
Il tutto, non dipende affatto dall'esistenza o meno di una GUI, ma 
semplicemente dal costrutto del linguaggio java.

 classe.
esistono anche i blocchi di inizializzazione nel corpo della classe,
statici o meno.
però devono essere tali, definiti cioè con le parentesi graffe. non
buttando codice alla rinfusa dentro il corpo della classe...
e poi si deve sapere a cosa servono, quando e in che circostanze il
codice viene richiamato. i blocchi (non statici) vengono richiamati
prima di ogni costruttore e nell'ordine in cui vengono definiti, anche
se ci si può potenzialmente fare tutto il loro scopo è quello di
inzializzare l'oggetto.


Vi ho gia' detto che e' stato un errore di distrazione, lo so' che le 
istruzioni devono essere contenute in qualche metodo o costruttore (a 
eccezione dei blocchi dichiarati static).