Pas de fonction 'MAIN' en Java

Fermé
wilfrid_hl2 Messages postés 67 Date d'inscription vendredi 8 septembre 2006 Statut Membre Dernière intervention 9 septembre 2007 - 7 mai 2007 à 19:48
 Utilisateur anonyme - 8 mai 2007 à 08:38
Bonsoir,

Je suis débutant en Java et en essayant de lancer un prog (trouvé sur le net), j'ai une erreur du type pas de fonction 'main' .

C'est vrai que dans les exemples de prog que je fais il y à toujours une fonction 'main' présente.

Alors ma question est la suivante, peut-on créer/lancer des prog sans la fonction 'main' .

Pour info voici le prog et je le lance via JavaCréator.

import java.awt.*;
import javax.swing.event.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.*;
import java.lang.Math.*;
import java.util.GregorianCalendar;

public class ClockApp
{
ClockApp()
{
fenetre=new JFrame("JClock");
fenetre.addWindowListener( new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});

calend=new GregorianCalendar();
h=calend.get(GregorianCalendar.HOUR_OF_DAY);
min=calend.get(GregorianCalendar.MINUTE);
sec=calend.get(GregorianCalendar.SECOND);

clockPanel=new ClockPanel();
fenetre.getContentPane().add(clockPanel);
fenetre.setSize(400,400);
fenetre.show();
clockThread=new ClockThread(this);
clockThread.start();

}/* Fin constructeur*/

class ClockPanel extends JPanel
{
public void paintComponent (Graphics g)
{
super.paintComponent(g);

xc=getWidth()/2;
yc=getHeight()/2;
int rayon=Math.min(xc,yc)*80/100;

font= new Font("Times New Roman",0,15);
g.setFont(font);

for(int i=1;i<=12;i++)
{
double angle=i*Math.PI/6.0-Math.PI/2.0;
double x=xc+rayon*Math.cos(angle);
double y=yc+rayon*Math.sin(angle);
g.drawString(" "+i,(int)x,(int)y);
}

/* gestion et affichage de aiguilles*/

double anglesec=(sec*((Math.PI)/30.0)-(Math.PI/2.0));
int xsf=xc+(int)(0.7*rayon*Math.cos(anglesec));
int ysf=yc+(int)(0.7*rayon*Math.sin(anglesec));
g.setColor(Color.red);
g.drawLine(xc,yc,xsf,ysf);

double anglemin=(min*((Math.PI)/30.0)-(Math.PI/2.0));
int xmf=xc+(int)(0.6*rayon*Math.cos(anglemin));
int ymf=yc+(int)(0.6*rayon*Math.sin(anglemin));
g.setColor(Color.yellow);
g.drawLine(xc,yc,xmf,ymf);
double angleheure=(h*((2*Math.PI)/12.0)-(Math.PI/2.0));
int xhf=xc+(int)(0.4*rayon*Math.cos(angleheure));
int yhf=yc+(int)(0.4*rayon*Math.sin(angleheure));
g.setColor(Color.green);
g.drawLine(xc,yc,xhf,yhf);


}/* fin de paintComponent */

}/* fin de classe ClockPanel */

public void increment()
{
sec=sec+1;
if(sec>60)
{
min=min+1;
sec=1;
if(min>60)
{
min=1;
h=h+1;
if(h>12)
{
h=1;
}
}
}
clockPanel.repaint();
}

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

private JFrame fenetre;
private GregorianCalendar calend;
private int h,min,sec,xc,yc;
private ClockPanel clockPanel;
private ClockThread clockThread;
private Font font;

}/* fin de classe ClockApp*/

class ClockThread extends Thread
{
ClockThread(ClockApp horloge)
{
this.horloge=horloge;
}
public void run()
{
while(true)
{
horloge.increment();
try
{
sleep(1000);
}
catch(InterruptedException e)
{
}

}
}
private ClockApp horloge;
}


En vous remerciant de vôtre aide ;-)
A voir également:

3 réponses

informaticienchevronné
7 mai 2007 à 19:50
Pas de fonction 'MAIN' en Java

---> 2 questions me taraudent :

1: pourquoi ne pas tenter la fonction "pied" ?

2: comment tapez vous sur le clavier sans la fonction"main" ??
1
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
7 mai 2007 à 21:02
C'est normal. Tout programme Java doit avoir une fonction main. C'est par là que commencera le just In Time de Java à exécuter. Ainsi il te faut impérativement cette fonction dans un programme. Ceci ne veut pas dire qu'il en faut une par classe.
Désolé j'ai pas regardé ton code, il n'est pas indenté, c'est illisible.

Tu rajoutes donc dans la classe :

public static void main(String [] args) {
/*une instance de la classe*/
}

Et lorsque tu lances le programme : java le nom de la classe qui contient le main. Et sans le .class
java ClockApp dans ton cas.
1
Utilisateur anonyme
8 mai 2007 à 08:38
Salut!

J'ai juste un peu adapté le code (un pau lourd tout ça ;-) ) et ajouté la méthode main qui manquait:

import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class ClockApp extends JFrame {
	private JFrame fenetre;

	private GregorianCalendar calend;

	private int h, min, sec, xc, yc;

	private ClockPanel clockPanel;

	private ClockThread clockThread;

	private Font font;

	public ClockApp() {
		super("JClock");
		initializeComponent();
	}

	private void initializeComponent() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		calend = new GregorianCalendar();
		h = calend.get(GregorianCalendar.HOUR_OF_DAY);
		min = calend.get(GregorianCalendar.MINUTE);
		sec = calend.get(GregorianCalendar.SECOND);

		clockPanel = new ClockPanel();
		clockPanel.setPreferredSize(new Dimension(400, 400));
		getContentPane().add(clockPanel);
		clockThread = new ClockThread(this);
		clockThread.start();

	}

	public void increment() {
		sec = sec + 1;
		if (sec > 60) {
			min = min + 1;
			sec = 1;
			if (min > 60) {
				min = 1;
				h = h + 1;
				if (h > 12) {
					h = 1;
				}
			}
		}
		clockPanel.repaint();
	}

	class ClockPanel extends JPanel {
		private static final long serialVersionUID = -1552488655158703467L;

		public void paintComponent(Graphics g) {
			super.paintComponent(g);

			xc = getWidth() / 2;
			yc = getHeight() / 2;
			int rayon = Math.min(xc, yc) * 80 / 100;

			font = new Font("Times New Roman", 0, 15);
			g.setFont(font);

			for (int i = 1; i <= 12; i++) {
				double angle = i * Math.PI / 6.0 - Math.PI / 2.0;
				double x = xc + rayon * Math.cos(angle);
				double y = yc + rayon * Math.sin(angle);
				g.drawString(" " + i, (int) x, (int) y);
			}

			/* gestion et affichage de aiguilles */

			double anglesec = (sec * ((Math.PI) / 30.0) - (Math.PI / 2.0));
			int xsf = xc + (int) (0.7 * rayon * Math.cos(anglesec));
			int ysf = yc + (int) (0.7 * rayon * Math.sin(anglesec));
			g.setColor(Color.red);
			g.drawLine(xc, yc, xsf, ysf);

			double anglemin = (min * ((Math.PI) / 30.0) - (Math.PI / 2.0));
			int xmf = xc + (int) (0.6 * rayon * Math.cos(anglemin));
			int ymf = yc + (int) (0.6 * rayon * Math.sin(anglemin));
			g.setColor(Color.yellow);
			g.drawLine(xc, yc, xmf, ymf);
			double angleheure = (h * ((2 * Math.PI) / 12.0) - (Math.PI / 2.0));
			int xhf = xc + (int) (0.4 * rayon * Math.cos(angleheure));
			int yhf = yc + (int) (0.4 * rayon * Math.sin(angleheure));
			g.setColor(Color.green);
			g.drawLine(xc, yc, xhf, yhf);

		}

	}

	class ClockThread extends Thread {
		private ClockApp horloge;

		ClockThread(ClockApp horloge) {
			this.horloge = horloge;
		}

		public void run() {
			while (true) {
				horloge.increment();
				try {
					sleep(1000);
				} catch (InterruptedException e) {
				}

			}
		}
	}

	public static void main(String args[]) {
		ClockApp clock = new ClockApp();
		clock.pack();
		clock.setVisible(true);
	}
}




;-)
HackTrack
0