PDA

View Full Version : [Java]Metodo main non trovato nella class RectangleComponent


pentiumx84
17-03-2011, 18:35
Ciao a tutti,:) vi riporto un problema che ho riscontrato nell'eseguire un file .class(preso da un manuale di Java):
Praticamente ho scritto nel codice sorgente una classe :"RectangleComponent" tramite cui disegnare 2 rettangoli utilizzando il metodo main(Graphics2D) g; e altri metodi della classe Graphics2D.
Ora la questione è che riesco a compilarlo ma non a eseguirlo, infatti mi esce il seguente errore:"Metodo principale non trovato nella classe Rectangle Component.Definire il metodo principale come: public static void main (String[] args)". Il problema è che questo metodo non c'era nel codice sorgente e anche mettendolo mi restituisce lo stesso errore.
Cosa potrebbe essere??:(

Grazie dell'aiuto.

PS. Sono un novellino in questo campo come avrete sicuramente notato.

PGI-Bis
17-03-2011, 21:34
Il metodo main che ti è richiesto serve per far capire al programma "java" (omonimo del linguaggio e della piattaforma ma è un pezzo a sè stante) da dove partire per eseguire un certo programma. Tu scrivi sulla console:

java Pippo

e "java" (sempre il programma, chiamiamolo il lanciatore, via), crea la jvm e le dice di eseguire il metodo che si chiama public static void main(String[]) nella classe di nome Pippo.

Ammesso che riesca a trovarlo, la jvm esegue il contenuto di quel metodo main e termina.

Dunque se ho la classe:

public class Pippo {

}

Compilo (javac Pippo.java) ed eseguo (java Pippo) compare il messaggio "non trovo il metodo main".

Se la classe è:

public class Pippo {

public static void main(String[] args) {
}
}

Compilo (javac Pippo.java) ed eseguo (java Pippo) non compare il messaggio "non trovo il metodo main", la jvm parte e schiatta subito dopo perchè nel main non c'è alcuna istruzione da eseguire. Nota che ci possono essere scritte un sacco di altre cose in Pippo.java ma se il main non contiene alcuna istruzione nulla sarà eseguito (all'incirca, in verità è comunque eseguita una montagna di roba ma nulla di quello che effettivamente ci interessa).

Fatta questa premessa, se nonostante l'aggiunta di un metodo main compare comunque il messaggo "non riesco a trovare il main" c'è qualcosa che non va.

Trovandoci di fronte ad un primo approccio io direi prima di tutto di controllare di aver ricompilato il file sorgente dopo l'aggiunta del metodo main.

pentiumx84
18-03-2011, 21:37
:muro: Niente da fare, ho riprovato ma non funziona, come potete vedere qui sotto nel codice, il metodo main (String[] args) non c'è. Quando vado ad eseguirlo la JVM non riesce a trovere il main, se inserisco il main non riesco a compilare.
Il codice l'ho preso da un manuale Java molto noto ed aggiornato, possibile che sia sbagliato?:help:
Codice:
http://i1095.photobucket.com/albums/i477/hyperthreading/Per%20blog/Codice.gif

Grazie ancora.:)

PGI-Bis
18-03-2011, 23:36
Così com'è il codice non è eseguibile.

In più è certamente parte di un esempio più ampio, altrimenti non avrebbe neanche senso.

Per renderlo "eseguibile" bisognerebbe come minimo aggiungere quello che scrivo in verde:

import java.awt.EventQueue;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import javax.swing.JComponent;
import javax.swing.JFrame;

public class RectangleComponent extends JComponent {

public void main(Graphics g) {
Graphics2D g2 = (Graphics2D) g;
Rectangle box = new Rectangle(5, 10, 20, 30);
g2.draw(box);

box.translate(15, 25);
g2.draw(box);
}

@Override
protected void paintComponent(Graphics g) {
main(g);
}

public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {

public void run() {
RectangleComponent component = new RectangleComponent();
JFrame window = new JFrame("RectangleComponent Test");
window.add(component);
window.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
window.setSize(400, 400);
window.setVisible(true);
}
});
}
}

Questo apre una finestra al cui interno sono disegnati i due rettangoli.