# Applet funktioniert nicht



## Spawney (20. Apr 2010)

Hi

Ich schreibe gerade mit zwei Kollegen ein Minigame für ein Praktikum ("Vom Spiel zur Wissenschaft" ist das Thema) an der Uni. 
Es geht darum, dass man ein Elektron (Player 1), oder Proton (Player 2) steuern muss und die Bewegungen von einem elektrischen Feld je nachdem beeinflusst werden. Ziel ist es möglichst viele Punkte einzusammeln, wobei immer wenn ein Punkt eingesammelt wurde, ein neuer Gegner erscheint, der sich waagrecht oder senkrecht bewegt, dem es gilt auszuweichen.
Wir haben das Projekt in Java geschrieben, zuerst jedoch als Applikation. 
Da wir aber das Game auf einer Webseite präsentieren müssen, müssen wir es in ein Applet umschreiben, doch damit haben wir grosse Probleme...wir haben es bereits in das "Applet-Format" umgeschrieben (also mit privat int, start, stop, destroy) aber irgendwie funktioniert es nicht...es erscheint nur ein leeres Bild, wo eigentlich die Spieloberfläche erscheinen sollte...
Ich lade den workspace des Projekts am einfachsten auf Rapidshare hoch, dann könnt ihr euch das ganze Projekt ansehen, es wäre viel zu aufwendig den Quellcode von ca. 10 Klassen in Screenshots hochzuladen, wenn euch das aber lieber wäre, werd ich den Aufwand auf mich nehmen. 
Ich kann auch gerne den Quellcode der Applikation hochladen, wenn euch das hilft.

Ich brauch die Hilfe wirklich dringend, da wir das Projekt in geraumer Zeit präsentieren müssen, deshalb wäre ich euch wirklich dankbar, wenn ihr mir sagen könntet, was ich geanu ändern muss, damit es endlich läuft 

Ich arbeite mit Eclipse, falls das wichtig ist.

Vielen Dank im Voraus

Spawney

Applet Workspace: RapidShare: 1-CLICK Web hosting - Easy Filehosting

Der Quellcode der einzelnen Klassen ist unter Workspace/PPS-Game/source zu finden wobei im "run" Ordner sich die Execution Klasse befindet mit der man das Applet starten sollte.


----------



## hansmueller (21. Apr 2010)

Hallo,

probiert es mal mit "Java Webstart". Da müßt ihr das Programm nicht erst zu einem Applet umschreiben.
Aber achtet darauf, daß ihr es evtl. signieren müßt.

MfG
hansmueller


----------



## L-ectron-X (21. Apr 2010)

Wenn es trotzdem in einer Webseite als Applet eingebaut werden soll, schreibt ihr das Ganze so, dass ihr sämtliche GUI-Elemente auf einem Hauptpanel zusammensetzt. Und dieses Panel kann man ganz einfach in ein Applet oder in einen Frame setzen. Was dann noch angepasst werden muss, ist das Einlesen von Grafiken/Bildern/Icons, denn das ist ein klein wenig anders beim Applet.


----------



## Spawney (21. Apr 2010)

Das heisst also konkret man kann unser Programm nicht direkt mit paar wenigen Änderungen in ein Applet umschreiben, sondern ich muss das ganze Ding umkrämpeln?


----------



## L-ectron-X (21. Apr 2010)

Doch, genau das heißt es. Je nach dem, wie ihr euer Projekt bisher aufgebaut habt.
Das könnte die Sache ungemein erleichtern.


----------



## Spawney (22. Apr 2010)

Ok ;( . Na dann life's hard... könntest du mir das etwas genauer erklären, wie du das genau meinst mit "alle GUI-Elemente auf einem Hauptpanel zusammensetzten"?


----------



## L-ectron-X (23. Apr 2010)

Das ist wirklich nicht schwer. Ich kann dir gerade aus Zeitmangel kein (neues) Beispiel schreiben. Aber ich habe im Forum mindestens ein Beispiel zum Download bereit gestellt. Benutze bitte mal die Forumsuche.
Da dieses Thema immer wieder mal kommt, schreibe ich dann auch mal einen FAQ-Beitrag dazu.


----------



## Spawney (25. Apr 2010)

Also ich hab mal kurz angefangen das Panel so zu gestalten, wie es in deinem Beispiel steht. 
Das sieht erstma so aus (wie gesagt habe erst gerade angefangen):

```
package mainpanel;

import java.awt.Color;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.net.URL;
import java.util.Random;

import javax.swing.JFrame;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JApplet;

public class MainPanel extends JPanel{
	
	private JPanel board = new JPanel();
	
	private JFrame highscore = new JFrame();
	
	private JLabel magneticField = new JLabel();
	private JLabel ball = new JLabel();
	private JLabel points = new JLabel();
	private JLabel enemy = new JLabel();
	
	public MainPanel () {
		setLayout(null);
		setBounds(400,400,900,900);
		setBackground(Color.white);
	//--------------------------------
		board.setBounds(400,400,900,900);
		add(board);
	//--------------------------------
		highscore.setBounds(0,0,210,100);
		add(highscore);
	//--------------------------------
		
	}
	

}
```
Jetzt stellen sich mir aber leider schon etliche Fragen...
"board" soll das Spielfeld sein bzw. war das Spielfeld in der Applikation. Brauch ich das überhaupt noch oder ist das Applet-Fenster = Spielfeld?

Wie genau muss ich denn die Eigenschaften von den Klassen auf das Panel übertragen?
Hier die Eigenschaften der Highscore (bei mir werden immer zahlreiceh Fehler angezeigt, wenn ich die versuche irgendwie bei "highscore" einzubinden):

```
package highscore;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;

public class Highscore extends JFrame{

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private ImageIcon n0;		// Die Icons der drei Ziffern und deren Repräsentation
	private ImageIcon n1;		// in Form eines JLabels.
	private ImageIcon n2;
	private JLabel hun = new JLabel();
	private JLabel ten = new JLabel();
	private JLabel one = new JLabel();

	
	private void initHighscore()
	{	
		ImageIcon backgr = new ImageIcon("images/HighscoreBackground.png");
		JLabel background = new JLabel(backgr);	// Ein neues JLabel mit Hintergrund wird initialisiert.
		background.setBounds(0, 0, 210, 100);	// Das Layout des Hintergrunds wird gesetzt.
		this.hun.setBounds(0, 0, 70, 100);		// Das Layout aller drei Ziffern wird gesetzt.
		this.ten.setBounds(70, 0, 70, 100);
		this.one.setBounds(140, 0, 70, 100);
		this.getContentPane().add(this.hun);	// Der Hintergrund und die drei Ziffern werden dem Fenster
		this.getContentPane().add(this.ten);	// hinzugefügt.
		this.getContentPane().add(this.one);
		this.getContentPane().add(background);
	}
	
	public Highscore()
	{
		this.update(0);							// Der Konstruktor ruft update(0) auf, was alle Ziffern auf
		this.initHighscore();					// 0 setzt. Anschliessend werden dem Fenster mit initHighscore
	}											// alle Komponenten hinzugefügt.
	
	public void update(int value)
	{
		int hundred,ten,one;
		hundred = value/100;					// Hier werden die Ziffern einer Zahl aufgespalten. Je nach Zahl
		ten = (value%100)/10;					// werden dann unterschiedliche ImageIcon-Objekte erzeugt.
		one = value%10;
		ImageIcon hundert = new ImageIcon("images/" + hundred + ".png");
		ImageIcon zehn = new ImageIcon("images/" + ten + ".png");
		ImageIcon eins = new ImageIcon("images/" + one + ".png");
		this.n0 = hundert;						// Den Variablen, die die Icons erhalten, werden neue Icons
		this.n1 = zehn;							// zugewiesen und auf die JLabels gesetzt.
		this.n2 = eins;
		this.hun.setIcon(this.n0);
		this.ten.setIcon(this.n1);
		this.one.setIcon(this.n2);
	}
}
```

Ich hab halt allgemein das Problem, dass ich nicht weiss wie ich die Eigenschaften der einzelnen Klassen, die ich in der Applikation habe, nun auf das Panel übertragen soll.

lg
Spawney


----------

