Applet erstellen aus JAR ?!

parazzz

Grünschnabel
Hallo,

ich habe ein kleines Problem mit der Erstellung eines Applets. Ich habe ein Programm geschrieben, welches aus vielen vielen Klassen sowie drei Packages besteht. Eine runnable Jar habe ich auch bereits. Jetzt möchte ich dieses Programm als Applet in eine website integrieren, schaffe das aber nicht so ganz. Den Code für die Page habe ich.
Wie kann ich denn ein JAR File direkt dort einfügen? Oder muss ich erst in einigen Klassen irgendwas appletmäßiges hizufügen und das dann erneut als JAR exportieren?

Hier noch der HTML Code:
Code:
<HTML>
<HEAD>
    <TITLE>Spiel Des Lebens</TITLE>
</HEAD>
<BODY>

<H1 ALIGN="CENTER">Spiel Des Lebens:.Gruppe 8</H1>
<CENTER>
<P>

<APPLET CODE="Controller/View.class" WIDTH="348" HEIGHT="322" ALIGN="BOTTOM" archive = "GameOfLife.jar">
Ihr Browser ist nicht java-f&auml;hig!
</APPLET>

</CENTER>
</BODY>
</HTML>

In der View.class befindet sich die Methode, die ausgeführt werden muss, um das Programm grafisch darzustellen.


Danke euch!
 
Moin!
Der Code zum Einbinden sieht okay aus. Wobei ich nicht sicher bin, ob man statt
Controller/View.class
nicht
Controller.View.class
schreiben müsste?!

Deine View Klasse muss auf jeden Fall vom Typ Applet sein, bzw diese Klasse erweitern.
Hier steht eigentlich alles kurz zusammengefasst, wie meine eine Applikation in ein Applet umwandelt:
http://java.sun.com/docs/books/tutorial/deployment/applet/getStarted.html

*grüssle*
MeinerEiner


Edit:
Zumindest mal unter Windows/Firefox geht sowohl die Schreibweise Controller.View.class als auch Controller/View.class..
 
Zuletzt bearbeitet von einem Moderator:
Ok, erstmal vielen Dank für die schnelle Antwort.
Ich habe jetzt in meine Klasse die Klasse java.Applet.applet importiert, die gesamte Klasse über extends applet erweitert und eine Methode init() eingefügt, die genau die gleichen Anweisungen beinhaltet wie meine MAIN Methode. Leider klappt das immernoch nicht. Ich poste mal den Code (auch wenn er recht lang ist, sry), vielleicht findet ja jemand den Fehler, weshalb es nicht geht. Die Main Methode und die Init Methode befinden sich ganz am Ende. Danke schonmal

Code:
#
package view;
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.Component.*;
import java.awt.event.ComponentEvent;
import java.awt.event.ComponentListener;
import model.*;
import controller.*;
import java.applet.Applet;

public class GameDesign  extends Applet{
	
	private GameDesign window;
	private World world;
	private int cellSize;
	private int winWidth;
	private int winHeight;
	private int paneWidth;
	private int paneHeight;
	private int insetL;
	private int insetR;
	private int insetT;
	private int insetB;
	private Dimension screenResolution = Toolkit.getDefaultToolkit().getScreenSize();
	private int menuBarHeight;
	private JFrame frame;
	private MyJPanel panel;
	private ToolBar toolbar;
	private String txtFile;
	
	public GameDesign(World world) {
		this.world = world;
		
		// Zellengröße initialisieren, standardmäßig 10 x 10 Px
		this.cellSize = 10;
		
		//JFrame.setDefaultLookAndFeelDecorated(true);
		this.frame = new JFrame("Spiel des Lebens Gruppe 8");
		BorderLayout layout;
		
		// Layout erstellen, dass Spielfeld in Zellen und Toolbar trennt
		layout = new BorderLayout();
		this.frame.setLayout(layout);
			
		// Frame (sonstige Einstellungen)
		this.frame.setLocationByPlatform(true);
		this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		
		// Toolbar
		this.toolbar = new ToolBar(this.frame, this.world);
		
		// Zellen
		this.panel = new MyJPanel(this.world, this.frame, this.cellSize);
		this.frame.add(this.panel, BorderLayout.CENTER);

        // Listener hinzufügen (bspw. für Resize des Fensters durch User)
		ComponentListener listen = new GuiComponentListener(this.frame);
		this.frame.addComponentListener(listen);
		
		// Mouse-Listener bspw. für Klick auf eine Zelle
		MouseListener listenMouse = new GuiMouseEventListener(this.frame, this.panel);
        this.frame.addMouseListener(listenMouse);
        
        // Fenster auf Größe Hälfte des Bildschirms setzen        
        this.winWidth = screenResolution.width / 2;
        this.winHeight = screenResolution.height / 2;
        
        // Fenster anzeigen
        // Zugriff auf getInsets() möglich
        this.frame.setVisible(true);
        
        // Framegröße anpassen und Fenster positionieren
        setFrameSize(this.frame, this.winWidth, this.winHeight);
	}
	
	// Konstruktor beim Starten der GUI
	public GameDesign() {
	}
	
	// wird aufgerufen, nachdem vom User eine gültige Txt-Datei eingelesen wurde
	public void setGameDesignAfterGettingTxt(World world) {
		this.world = world;
		this.panel.setWorld(this.world);
		
		// aktuelle Anzahl der Zellen
        int numberCellsX = this.winWidth / this.cellSize;
        int numberCellsY = this.winHeight / this.cellSize;

        // Wenn Anzahl der Zellen in Textdatei größer als Standardwert
        // Dann Spielfeld auf x und y-Werte aus Txt-Datei anpassen
        if (this.world.countCols() > numberCellsX) this.winWidth = this.world.countCols() * this.cellSize;
        if (this.world.countRows() > numberCellsY) this.winHeight = this.world.countRows() * this.cellSize;
		
        // Framegröße anpassen und Fenster positionieren
        setFrameSize(this.frame, this.winWidth, this.winHeight);

		this.frame.repaint();
	}
	
	public void createFrame() {
		
	}
	
	// setzt Größe des Fensters in Konstruktor
	public void setFrameSize(JFrame frame, int width, int height) {
        // Anzahl der Zellen horizontal und Vertikal
        // überflüssigen Platz wegschneiden (Zellen sollen 100% des Frames füllen)
    	int numberCellsX = width / this.cellSize;
    	int numberCellsY = height / this.cellSize;
    	int remainder = width % this.cellSize;
    	int newWinWidth = width - remainder + frame.getInsets().left + frame.getInsets().right + 1;
    	remainder = height % this.cellSize;
    	int newWinHeight = height - remainder + frame.getInsets().top + frame.getInsets().bottom + 1;
    	
		// Fenster positionieren: genau in der Mitte des Bildschirms
		frame.setBounds((screenResolution.width - newWinWidth) / 2,
					    (screenResolution.height - newWinHeight) / 2,
						 newWinWidth, newWinHeight);
	}
	
	// setzt Größe des Fensters in MyJPanel-Klasse
	public static void setFrameSize(JFrame frame, int width, int height, int cellSize) {
        // Anzahl der Zellen horizontal und Vertikal
        // überflüssigen Platz wegschneiden (Zellen sollen 100% des Frames füllen)
		Dimension screenResolution = Toolkit.getDefaultToolkit().getScreenSize();
    	int numberCellsX = width / cellSize;
    	int numberCellsY = height / cellSize;
    	int remainder = width % cellSize;
    	int newWinWidth = width - remainder + frame.getInsets().left + frame.getInsets().right + 1;
    	remainder = height % cellSize;
    	int newWinHeight = height - remainder + frame.getInsets().top + frame.getInsets().bottom + 1 + 47;
    	
    	frame.setSize(newWinWidth, newWinHeight);

	}

	// bekommt GameDesign-Objekt aus View direkt nach Erzeugung übergeben (ist aktuelles GameDesign-Objekt)
	public void passDesignObj(GameDesign window) {
		this.window = window;
	}
	
	// übergibt GameDesign-Objekt an ToolBar
	// von dort wird es dann an die Listener übergeben
	public void passDesignObjToToolbar(GameDesign window) {
		// GameDesign-Objekt übergeben
		this.toolbar.passDesignObj(this.window);
		
		// ActionListener starten 
		this.toolbar.setActionListeners();
	}
	
	public void passObjsToToolbar(GameDesign window, World world) {
		this.window = window;
		
		// GameDesign-Objekt übergeben
		this.toolbar.passDesignObj(this.window);
		this.toolbar.passModelObj(world);
		
		// Action-Listener starten
		this.toolbar.setActionListeners();
	}

	// updated das Model-Objekt (wird aus ToolBar bzw. Listener-Klassen heraus ausgeführt)
	public void setWorld(World world) {
		this.world = world;
		this.frame.repaint();
	}
	
	// setzt Größe der Zellen
	public void setCellSize(int newCellSize) {
		// Zellengröße in GameDesign-Klasse updaten
		this.cellSize = newCellSize;
		
		// Zellengröße in MyJPanel-Klasse updaten
		this.panel.setCellSize(this.cellSize);
		
		// Panel neu zeichnen
		this.frame.repaint();
	}
	
	// gibt zellengröße zurück
	public int getCellSize() {
		return this.cellSize;
	}
	
	// speichert vom User per Open-Button geladenes TXT-File
	// siehe OpenActionListener
	public void setTxtFile(String txtFile) {
		this.txtFile = txtFile;
	}
	
	// gibt Name des eingelesenes Txt-Files zurück
	public String getTxtFile() {
		return this.txtFile;
	}
	
	// gibt Zustand der Welt zurück (rund oder flach)
	public boolean getShape() {
		return this.world.getShape();
	}
	
	// gibt Anzahl der Generationen zurück
	public int getGenerations() {
		return this.world.getNumberOfGenerations();
	}
	
	// gibt Frame zurück
	public JFrame getFrame() {
		return this.frame;
	}
	
	// gibt Panel zurück
	public MyJPanel getPanel() {
		return this.panel;
	}
	public void init() {
		Controller controller = new Controller();
		controller.passContrObjToController(controller);
	}
	
	public static void main(String[] args) {
		// GUI-Objekt erzeugen
		Controller controller = new Controller();
		controller.passContrObjToController(controller);
	}
}
 
Zuletzt bearbeitet:
Also ich seh den Fehler auch nicht. Ist auch ewig lange her, dass ich mal ein Applet geschrieben habe. Aber mir kommt es schonmal ziemlich merkwürdig vor, dass du da als erstes ein neues JFrame erzeugst und dann auch noch mit EXIT_ON_CLOSE ... das Applet sollte doch eigentlich die Oberfläche darstellen (?).
 
Hmm also es ist ja so: Die Jar ist ausführbar und erstellt eben ein Fenster inkl. grafischer Oberfläche wenn ich es starte.. Hier findest du das gleiche Programm, allerdings von jemand anderem programmiert und bereits als Applet. Ich muss halt noch mein JAR File in das Applet umwandeln, sodass er das im Browser startet.
Na ja, vielleicht weiss ja noch jemand weiter. Danke dir auf jeden Fall!!
 
Moin!
Also wenn du dir den Link den ich gepostet habe mal angeschaut hättest, müsstest du eigentlich wissen, wieso es nicht geht.
1. Gibt es keine Main Methode in Applets.
2. Statt Frames werden eben Applets benutzt. Du hingegen erstellst in dem Applet GameDesign nochmal ein Frame.
3. Statt eines Konstruktors werden die start und init Methoden des Applets genutzt um dieses zu initialisieren.

Lies dir das Tutorial mal durch und ändere dein Programm dementsprechend..

*grüssle*
MeinerEiner
 
Zurück