# Applet für Anfänger :/



## trixz222 (27. Mai 2008)

Hallo,
in meiner Schule haben wir Projektwochen gehabt, dort sollten wir ein Java Applet schreiben.
Gesagt getan, funktioniert auch alles wunderbar wenn ich es mit Eclipse starte.
Da ich es aber auf meiner Homepage einbinden möchte, habe ich mich mal schlau gemacht.
Man braucht ja eine Main-Methode und eine Manifest - Datei um eine .jar Datei zu erstellen. Aber immer wenn ich das in Eclipse Exportieren will, kommt beim starten der .jar Datei ein Fehler. 


> MAIN-Class nicht gefunden



Meine Testklasse:

```
package projekt2008;
	import java.applet.*;
	import java.awt.*;

	 public class TestklasseZeichenebene extends Applet
     {
        FachklasseZeichenebene meineZeichenebene;
        public static void main( String[] args ) { }
        public TestklasseZeichenebene()
             { 
                  meineZeichenebene = new FachklasseZeichenebene();
                  meineZeichenebene.geschwindigkeit(10);
                  meineZeichenebene.winkelberechnung();
                  meineZeichenebene.winkelberechnung2();
                  this.add(meineZeichenebene);
                  this.setBackground(Color.blue);
                  this.setSize(200,150);
                  this.setVisible(true);
             }
        public void paint (Graphics g)
             {
                  {               
                       meineZeichenebene.paintComponent(g);
             }      
     }
}
```

Meine Fachklasse:


```
package projekt2008;
	import javax.swing.*;

	import sun.java2d.loops.DrawRect;

	import java.awt.*;

		public class FachklasseZeichenebene extends JPanel
			{ 
			//Variablen
				//Allgemein
				int xmaximal=180;  						//Rahmen Horizontal
				int ymaximal=150;						//Rahmen Vertikal
				int xminimal=10;						
				int yminimal=10;
				int v;
				int abbruch=1;
				
				//Kugel 1
				int xkugel=20;							//Kugel Startposition Horizontal
				int ykugel=20;							//Kugel Startposition Vertikal
				int radius=15;							//Radius
				int xstoß;								
				int ystoß;
				
				//Winkel Kugel 1
				int grad=60;							//Gradeinstellung
				double xv;
				double yv;
				
				//Kugel 2
				int xkugel_2=80;							//Kugel Startposition Horizontal
				int ykugel_2=20;							//Kugel Startposition Vertikal
				int radius_2=15;							//Radius
				int xstoß_2;								
				int ystoß_2;
				
				//Winkel Kugel 2
				int grad_2=30;							//Gradeinstellung
				double xv_2;
				double yv_2;
				
				//Rollwiderstand
				double smax=500000;
				double s=30;
	
				public void geschwindigkeit (int v)		//Geschwindigkeitsberechnung
					{	
						this.v=v;
					}
 	
				public void winkelberechnung ()				//Winkelberechnung
					{ 
						xv=Math.cos(Math.toRadians(grad))*v;
						yv=(v*v)+(xv*xv);
						yv=Math.sqrt(yv);
						System.out.println(xv);
						System.out.println(yv);
					}
				public void winkelberechnung2 ()				//Winkelberechnung
				{ 
					xv_2=Math.cos(Math.toRadians(grad_2))*v;
					yv_2=(v*v)+(xv_2*xv_2);
					yv_2=Math.sqrt(yv_2);
					System.out.println(xv_2);
					System.out.println(yv_2);
				}
				
	//KUGEL 1!
				
				public void paintComponent (Graphics g)
					{ 
						for (int i = 0; i < 100; i++) 									//ZÄhlerschleife
							{
						
								g.setColor(Color.yellow);								 //Farbe Bestimmen
								g.drawRect(xminimal,yminimal,xmaximal+2,ymaximal+2);	 //Rechteck
   
								while (abbruch!=0) 
									{
							
					
									{
										{			
											g.setColor(Color.blue);
											g.fillOval(xkugel, ykugel, radius, radius);

			
											if ((xstoß<xmaximal-radius || xkugel<=xminimal))  //Links nach Rechts!
												{ 
													xkugel=xkugel+(int)xv;
													xstoß=xkugel;
													s=s+0.1;
													System.out.println(s);
												}
 		    
											if (xstoß>=xmaximal-radius) //Rechts nach Links
												{ 
													xkugel=xkugel-(int)xv;	
													s=s+0.1;
												}
 		
											if (ystoß<ymaximal-radius || ykugel<=yminimal)
												{ 
													ykugel=ykugel+(int)yv;
													ystoß=ykugel;
													s=s+0.1;
												}
 		
											if (ystoß>=ymaximal-radius)
												{ 
													ykugel=ykugel-(int)yv;
													s=s+0.1;
												}	
 		
											if (s>250)
												{
													s=smax;
												}
													g.setColor(Color.yellow);
													g.fillOval(xkugel, ykugel, radius, radius);
													System.out.println(s);
													g.setColor(Color.blue);
													g.drawRect(xminimal,yminimal,xmaximal+2,ymaximal+2);
													g.setColor(Color.yellow);
													g.drawRect(xminimal,yminimal,xmaximal+2,ymaximal+2);
					   
					   

		
													try 
														{
															Thread.sleep((int)s);
														}
															catch (InterruptedException e){}
															g.drawRect(xminimal,yminimal,xmaximal+2,ymaximal+2);
							}


//						KUGEL 2!
							g.setColor(Color.blue);
							g.fillOval(xkugel_2, ykugel_2, radius, radius);

		
								if (xstoß_2<xmaximal-radius || xkugel_2<=xminimal) //Links nach Rechts!
									{ 
										xkugel_2=xkugel_2+(int)xv_2;
										xstoß_2=xkugel_2;
										s=s+0.1;
										System.out.println(s);
									}
		    
								if (xstoß_2>=xmaximal-radius) //Rechts nach Links
									{ 
										xkugel_2=xkugel_2-(int)xv_2;	
										s=s+0.1;
									}
		
								if (ystoß_2<ymaximal-radius || ykugel_2<=yminimal)
									{ 
										ykugel_2=ykugel_2+(int)yv_2;
										ystoß_2=ykugel_2;
										s=s+0.1;
									}
		
								if (ystoß_2>=ymaximal-radius)
									{ 
										ykugel_2=ykugel_2-(int)yv_2;
										s=s+0.1;
									}	
		
									if (s>250)
										{
											s=smax;
										}
											g.setColor(Color.red);												//Farbe/Kreis
											g.fillOval(xkugel_2, ykugel_2, radius, radius);
											System.out.println(s);
											g.setColor(Color.blue);
											g.fillOval(xkugel_2, ykugel_2, radius, radius);
											g.setColor(Color.red);
											g.fillOval(xkugel_2, ykugel_2, radius, radius);

	
												try 											//Verlangsamerung
													{
														Thread.sleep((int)s);
													}
														catch (InterruptedException e){}
							}

						
								}
			}
					}	
			}
```

Außerdem muss ich es ja im Html einbinden, dass hab ich so gemacht:



> <p>
> <applet code="projekt2008.jar" width="400" height="400">
> </applet>
> </p>



Ich bedanke mich schonma im vorraus 

mfg trixZ


----------



## zeja (27. Mai 2008)

Hab mal Java-Code Tags eingefügt damit man deinen Quellcode besser lesen kann.

Wenn du ein Jar verwendest muß das ganze wohl so aussehen:

```
<applet class="projekt2008.TestklasseZeichenebene.class" width="400" height="400" archive="projekt2008.jar"/>
```


----------



## trixz222 (27. Mai 2008)

danke 
ähm, das hab ich jetzt in meine html datei eingebaut. aber es geht immer noch nicht 
könnt mir jemand vielleicht die manifest- datei schreiben?


----------



## zeja (27. Mai 2008)

Hmm und so?

```
<applet code="projekt2008.TestklasseZeichenebene.class" width="400" height="400" archive="projekt2008.jar"/>
```


----------



## trixz222 (27. Mai 2008)

auch nich


----------



## zeja (27. Mai 2008)

Achso exportier das Jar nochmal mit eclipse. Wenn du auf next klickst kommst du irgendwann zu einer Seite wo man eine Main-Class angeben kann. Schau mal ob das klappt wenn du die Applet-Klasse da angibst.

Sorry... habe auch noch nicht so recht mit Applets gearbeitet.

Sonst lies mal selber: http://java.sun.com/docs/books/tutorial/deployment/applet/html.html

http://www.tutorials.de/forum/java/198005-java-applet-jar-datei.html
http://www.tutorials.de/forum/html/150536-java-applet-als-jar-einbinden.html


----------



## Xandro (27. Mai 2008)

Moin,

ääääh ... Applet?
Wieso hat die dann eine main-Methode?
Brauch man dafür nicht die init()-Methode?

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

zeja hat gesagt.:


> Achso exportier das Jar nochmal mit eclipse. Wenn du auf next klickst kommst du irgendwann zu einer Seite wo man eine Main-Class angeben kann. Schau mal ob das klappt wenn du die Applet-Klasse da angibst.
> 
> Sorry... habe auch noch nicht so recht mit Applets gearbeitet.
> 
> ...




ähm^^ was is die Applet-Klasse in dem Fall^^
sry Anfänger :/


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> ähm^^ was is die Applet-Klasse in dem Fall^^
> sry Anfänger :/



Die Applet-Klasse ist die Klasse, wo die init()-Methode drin steht.
Zumindest war es bei den Applets so, die ich kreiert habe.
Mich wundert, dass dort urplötzlich eine main-Methode verwendet wird *kopfkratz*

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

wo genau müsst ich den die init()-Methode einfügen?


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> wo genau müsst ich den die init()-Methode einfügen?



Arg ... ich doof ... 
Ne, vergiss was ich sagte.
Habe die init-Methode immer eingefügt, weil ich Variablen initialisiert habe.
Die Methode wird automatisch eingefügt durch extends Applet.

Demnach ist Deine Applet-Klasse die Klasse, wo Du von Applet ableitest.

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

also die Testklasse?
reicht das wenn ich da 





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


reinschreib?
grüßel


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> also die Testklasse?
> reicht das wenn ich da
> reinschreib?
> grüßel



Nein, eben das verwirrt mich grad.
Applets besitzen eigentlich keine main-Methoden, das unterscheidet sie ja extra zu einer Applikation.

Ich würde die Main-Methode somit rausschmeißen und alles was da drin steht, in die init()-Methode packen, die Du dann dadurch überschreibst.

Auch von mir noch zwei Links für einen minimalen Überblick:
http://www.highscore.de/java/aufbau/applet.html
http://java.sun.com/docs/books/tutorial/deployment/applet/index.html

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

jetzt bin ich verwirrt^^
in meim quellcode ganz oben steht doch garnix in der Main Methode?^^
soll ich jetzt die "public TestklasseZeichenebene()" umbennen in 
"public void init()"?


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> jetzt bin ich verwirrt^^
> in meim quellcode ganz oben steht doch garnix in der Main Methode?^^
> soll ich jetzt die "public TestklasseZeichenebene()" umbennen in
> "public void init()"?



*seufz* ... ja, habe ich wieder mal übersehen, dass die leer ist.
Es ist halt sehr undurchsichtig, weil Du Applikation mit Applet mischst :-/
Du kannst Dir doch in Eclipse eine Applet-Vorlage erstellen lassen, da steht (zumindest bei mir) auch einiges an Erklärungen drin.

Beispiel-Klasse aus dem Sun-Tutorial:


```
import java.applet.Applet;
import java.awt.Graphics;

public class Simple extends Applet {

    StringBuffer buffer;

    public void init() {
        buffer = new StringBuffer();
        addItem("initializing... ");
    }

    public void start() {
        addItem("starting... ");
    }

    public void stop() {
        addItem("stopping... ");
    }

    public void destroy() {
        addItem("preparing for unloading...");
    }

    private void addItem(String newWord) {
        System.out.println(newWord);
        buffer.append(newWord);
        repaint();
    }

    public void paint(Graphics g) {
	//Draw a Rectangle around the applet's display area.
        g.drawRect(0, 0, 
		   getWidth() - 1,
		   getHeight() - 1);

	//Draw the current string inside the rectangle.
        g.drawString(buffer.toString(), 5, 15);
    }
}
```

Du brauchst keinen Konstruktor in Deiner Klasse.
Alles was Du in Deinem Konstruktor hast, packst Du in die init-Methode.
Die Main-Methode löschst Du komplett raus.
Auch this.setVisible(true) solltest Du nicht brauchen.
Und so einiges mehr, was vorhanden ist, aber unnütz erscheint...

Ich hoffe, ein wenig Verständnis reingebracht zu haben.

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

Xandro hat gesagt.:


> *seufz* ... ja, habe ich wieder mal übersehen, dass die leer ist.
> Es ist halt sehr undurchsichtig, weil Du Applikation mit Applet mischst :-/
> Du kannst Dir doch in Eclipse eine Applet-Vorlage erstellen lassen, da steht (zumindest bei mir) auch einiges an Erklärungen drin.
> 
> ...



ja, danke 
jetzt hab ich nurnoch das problem mit dem einbinden in das html...
hab jetzt hier Testklasse und Fachklasse...
oder soll ich es als .jar machen? Wenn ja welches ist dann die erforderliche Main-Methode?
gruß trixz


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> ja, danke
> jetzt hab ich nurnoch das problem mit dem einbinden in das html...
> hab jetzt hier Testklasse und Fachklasse...
> oder soll ich es als .jar machen? Wenn ja welches ist dann die erforderliche Main-Methode?
> gruß trixz



Also als Applet-Klasse (das Gegenstück zur Main-Klasse) nutzt Du Deine TestKlasse.
Denn dort wird vom Applet abgeleitet und somit die nötigen Funktionen enthalten.

Und nochmal:
Applikation -> main-Methode
Applet -> init-Methode

Zur Erstellung Deines Archives sei gesagt, dass Du weder eine Manifest-Datei benötigst, noch eine Main-Klasse, weil beides für die Ausführung einer Applikation gefordert wird, die Du ja nicht besitzt.

Also einfach folgende Zeilen aufrufen und die Platzhalter ersetzen:

```
jar cf <Archiv> <Klassendateien>
```

Gruß,
Xan


----------



## trixz222 (27. Mai 2008)

Xandro hat gesagt.:


> Also als Applet-Klasse (das Gegenstück zur Main-Klasse) nutzt Du Deine TestKlasse.
> Denn dort wird vom Applet abgeleitet und somit die nötigen Funktionen enthalten.
> 
> Und nochmal:
> ...



heul^^
jetzt in der CMD aufrufen oder wie ?
oder im html? hä?^^


----------



## Xandro (27. Mai 2008)

trixz222 hat gesagt.:


> heul^^
> jetzt in der CMD aufrufen oder wie ?
> oder im html? hä?^^



In der Konsole, also ja, CMD! 

Aller Anfang ist schwer ... und Applets sind out, WebStart rulz ;-)


----------



## trixz222 (27. Mai 2008)

Xandro hat gesagt.:


> In der Konsole, also ja, CMD!
> 
> Aller Anfang ist schwer ... und Applets sind out, WebStart rulz ;-)



Thx 
juhu geht


----------

