# Mensch ärgere dich nicht Applet



## moe (4. Mrz 2005)

Hey entschuldigt wenn ich nochma störe. Mitlerweile habe ich es geschafft das Mensch ärgere dich nicht Spiel soweit fertig zu schreiben. Nun möchte ich es aber als Applet statt Applikation haben. 

Ich dachte, dass das einfach ist und ich anstatt der main Klasse ich nur ne "init" Klasse brauche in der folgendes steht:

```
import java.awt.*;
import java.awt.event.*;
import java.applet.*;

public class CT_Applet extends Applet
{
	public void init()
	{
		Ausgabe f= new Ausgabe();		
		add(f);
	}
}
```

Also info: Ich habe 4 Klassen, wovon eine die main war. Eine Klasse für die Arrays die das Feld darstellen, eine in der der/die Spieler mit regeln etc gemacht werden und eine in der mit repaint ausgegeben wird.
In der main habe ich einfach nur die Ausgabe aufgerufen und basta. 

Was meint ihr?


----------



## Sky (4. Mrz 2005)

Hast Du es so mal versucht?? Wenn ja, was passiert bzw. passiert nicht?

Ansonsten: Verstehe die Frage nicht genau...


----------



## Guest (4. Mrz 2005)

Achja stimmt 

Es passiert einfach garnichts. Es kommt nur ein graues Fenster mit nem roten X oben links in der Ecke.
Unten steht erst "Applet Ausgabe notinited" und dann kommt nur noch (nach draufklicken aus Feld) "Fehler beim Laden des Java-Applets"

Dabei hab ich ja wie oben beschrieben es mit init aufgerufen.


----------



## Guest (4. Mrz 2005)

Achja stimmt 

Es passiert einfach garnichts. Es kommt nur ein graues Fenster mit nem roten X oben links in der Ecke.
Unten steht erst "Applet Ausgabe notinited" und dann kommt nur noch (nach draufklicken aus Feld) "Fehler beim Laden des Java-Applets"

Dabei hab ich ja wie oben beschrieben es mit init aufgerufen.

In der console steht folgendes:


Laden: Ausgabe.class ist nicht öffentlich oder hat keinen öffentlichen Autor.

java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class Ausgabe with modifiers ""

	at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)

	at java.lang.Class.newInstance0(Unknown Source)

	at java.lang.Class.newInstance(Unknown Source)

	at sun.applet.AppletPanel.createApplet(Unknown Source)

	at sun.plugin.AppletViewer.createApplet(Unknown Source)

	at sun.applet.AppletPanel.runLoader(Unknown Source)

	at sun.applet.AppletPanel.run(Unknown Source)

	at java.lang.Thread.run(Unknown Source)

Laden: Ausgabe.class ist nicht öffentlich oder hat keinen öffentlichen Autor.

java.lang.IllegalAccessException: Class sun.applet.AppletPanel can not access a member of class Ausgabe with modifiers ""

	at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)

	at java.lang.Class.newInstance0(Unknown Source)

	at java.lang.Class.newInstance(Unknown Source)

	at sun.applet.AppletPanel.createApplet(Unknown Source)

	at sun.plugin.AppletViewer.createApplet(Unknown Source)

	at sun.applet.AppletPanel.runLoader(Unknown Source)

	at sun.applet.AppletPanel.run(Unknown Source)

	at java.lang.Thread.run(Unknown Source)


----------



## The_S (4. Mrz 2005)

Wenn du es schon als Applikation hast, dann kannst du doch einfach statt von JFrame (oder was du auch nutzt) von JApplet ableiten. Solange du natürlich keine Zugriffsrechte verletzt.


----------



## Sky (4. Mrz 2005)

Ist die Klasse "Ausgabe" public? Also


```
public class Ausgabe
```
 und in der Datei Ausgabe.java gespeichert??


----------



## Guest (4. Mrz 2005)

Erstma danke für die Antworten!

Ja die Ausgabe.java sieht so aus:

public class Ausgabe extends Frame
und dann halt die Initialisierungen im Konstrukor

Ps.
ich arbeite bim Moment nur mit awt  - kein swing


----------



## Guest (4. Mrz 2005)

Das Tolle ist ja nur, dass er beim Compelieren keine Fehler sagt aber irgendwie nicht klar kommt wenn ich es mitm ie öffne.

Also aber in Ausgabe kann ich doch extends Frame lassen oder?

ich hab ja eine extra Klasse in der nur die init() steht. Denn wenn ich kein extends Frame in der Ausgabe habe kommen immer Fehler weil er einige Sachen dann nicht mehr kennt für die er eigentlich Frame braucht

Und ich hab mir das ganz easy vorgestellt


----------



## Sky (4. Mrz 2005)

Hier mal ein bißchen Bespiel-Code, wie eine Klasse aussehen sollte, wenn Sie als Applet und Application laufen soll:


```
public class Test extends Applet {
  TextField textField1 = new TextField();
  Button button1 = new Button();

  public Test() {

  }

  public void init() {
    // init: wird nur vom Applet aufgerufen
    textField1.setText("Test");
    button1.setLabel("Klick mich");
    this.add(textField1, null);
    this.add(button1, null);
  }

  public static void main( String[] args ) throws IOException {
    // main: wird nur von der Application aufgerufen
    Frame frame = new Frame(); // neuen Frame erzeugen
    Test test = new Test();    // neues Applet erzeugen
    test.init();               // Applet initialisieren
    frame.add(test);           // Applet dem Frame hinzufügen
    frame.pack();
    frame.setVisible(true);
  }
}
```


----------



## Guest (4. Mrz 2005)

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

class start extends Applet
{
	
	public void init()
	{
		Ausgabe f= new Ausgabe();		
		add(f);
	}
	
	public static void main(String args[])
	{
		Ausgabe f= new Ausgabe();		
		f.setResizable(false);
		f.setSize(650,600);
		f.setVisible(true);
	}
}
```


so sieht meine start.class /java aus

die würde ich dann ja mit 


```
<html>
<body>
<applet code="start.class"

	width =650
	height= 600
	></applet>
</body>
</html>
```

aufrufen odeR?

soll ich meine ausgabe mal hier posten oder könnt ihr damit eh nichts anfangen?  :wink:  :autsch:


----------



## Sky (4. Mrz 2005)

```
public void init() 
   { 
      Ausgabe f= new Ausgabe();       
      add(f); 
   }
```

Und Ausgabe extends Frame? Es wäre mir neu, wenn man einen Frame einem Applet hinzufügen könnte!


----------



## KSG9|sebastian (4. Mrz 2005)

Der Klassenname sollte nicht "start" lauten, 

1. weil man klassen groß schreibt
2. ist start nicht ein reserviertes Wort ?


----------



## Sky (4. Mrz 2005)

KSG9|plak hat gesagt.:
			
		

> Der Klassenname sollte nicht "start" lauten,
> 
> 1. weil man klassen groß schreibt
> 2. ist start nicht ein reserviertes Wort ?



1. Ja genau.
2. Das Wort "start" ist nicht als Klassenname verboten. Klassennamen wie for, if oder while sind jedoch nicht möglich


----------



## KSG9|sebastian (4. Mrz 2005)

jo, ka..hab nur so ins blaue geraten 

das mit "start" war wo anders, ich glaub javascript ^^


----------



## Guest (4. Mrz 2005)

Achja stimmt. Danke

Aber es will einfach nicht klappen.

Ich muss nochma schaun. Muss ich was beim repaint oder der paint-Klasse überhaupt beachten?

Das kann doch nicht soo schwer sein odeR?


----------



## Guest (4. Mrz 2005)

eigentlich brauch ich ja start um etwas zu starten odeR?

aber wie soll ich die methode start anlegen?
denn was muss darein?
das aus der ausgabe? 
die muss doch aber paint sein


----------



## Guest (5. Mrz 2005)

sky80 hat gesagt.:
			
		

> ```
> public void init()
> {
> Ausgabe f= new Ausgabe();
> ...



Daran wirds liegen. Was anderes weiß ich auch nicht mehr. Aber wie kann ich es denn schaffen, die Frame sachen zu nutzen und es dennoch als Applet zum laufen zu kriegen.
Wenn ich anstatt extends Frame einfach extends Applet mache klappen einige sachen nicht.


----------



## moe (5. Mrz 2005)

Kann mir hier keiner helfen?
Vielleicht wenn ich euch/dem den quellcode zeige?

Es kann doch nicht so schwer sein ein Applet zu erstellen oder?
Ich hätte gedacht, dass man einfach nur die main methode in init umändern muss und halt alles passende von Applet(wie extends applet und import applet ......) zu machen!?


----------



## L-ectron-X (5. Mrz 2005)

Hab jetzt den Thread nur teilweise verfolgt.
Aber wenn Du das Problem nur mit dem MS-IE hast, solltest Du Dir das hier mal rein ziehen:
http://www.java-forum.org/de/viewtopic.php?t=4936


----------



## moe (6. Mrz 2005)

Ich hab es bisher nur mit dem ie probiert!
Werds gleich ma damit testen..

Aber kannst du mir vielleicht verraten, ob ich wirklich nurdie main in init ändern muss damit das Applet eigentlich funzt?
Und was es mit dem extends Frame auf sich hat? Es hieß, dass keine Frame Klasse in einem Applet funktioniert?!


----------



## Sky (6. Mrz 2005)

Anonymous hat gesagt.:
			
		

> sky80 hat gesagt.:
> 
> 
> 
> ...



Was genau klappt denn dann nicht mehr?? 

Klar ist, dass Du es nicht 1:1 von extends Frame nach extends Applet bekommst. 
Ich habe Dir doch weiter oben aufgeschrieben, wie das ganze Funktionieren mus... hast du es so mal versucht??

Noch ein weiterer Vorschlag: Nimm anstatt eines Frame's ein Panel und füge dieses dem Applet hinzu. (Hinweis: Das Panel könntest Du auch einem Frame wieder hinzufügen)


----------



## moe (6. Mrz 2005)

Also danke für die Hilfe nochma!

Aber ich hab zum einen 4 Klassen und zum anderen hab ich es so probiert. Mitlerweile kommt immer folgendes: 
cannot init Anfang (die Klasse wo einfach nur init und main sind) und dann läd er bis zum umfallen und ich kann den ie nur noch schließen.

Ich verstehe das mit dem Frame nicht... Da liegt mein Problem. Wenn ich extends Panel oder Applet ANSTATT Frame mache klappen einige sachen nicht mehr!


----------



## L-ectron-X (6. Mrz 2005)

Wenn Du in AWT bleibst kannst Du auch jedes Applet einem Frame hinzufügen.
Applet erbt ja bekanntermaßen von Panel. Man muss dann allerdings die init()-Methode explizit aufrufen.

Um aus Deinem Frame ein Applet zu machen, musst Du die Klasse erst mal von java.applet.Applet erben lassen.
Es stimmt, die main()-Methode hat die gleiche Funktion wie die init()-Methode, was aber noch kein Garant dafür ist, dass das Applet am Ende funktioniert.


----------



## moe (6. Mrz 2005)

ist schon irgendwie klar. 
Nur was muss ich mitm Panel machen?
Ich muss doch in der Ausgabe extends Frame und bei der init extends Applet schreiben

die Applet klasse hab ich auch importet.

Und wo muss jetzt was mit Panel stehen?


----------



## moe (8. Mrz 2005)

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

public class Madn extends Applet
{

	public void init()
	{
		Ausgabe f= new Ausgabe();		
		add(f);
	}
	
	public static void main(String args[])
	{
		Ausgabe f= new Ausgabe();		

	}
}
```

So sieht meine Datei aus, die ich aufrufen möchte die dann eigentlich das Applet starten soll. Als Applikation funktioniert es! Nur als Applet sagt er immer:

Madn notinited und dann läd er bis zum umfallen.


Die Klasse Ausgabe fängt so an:

```
import java.awt.*;
import java.awt.event.*;

public class Ausgabe extends Frame
{
```

Kann mir keiner helfen!?


----------



## moe (8. Mrz 2005)

Hätte ich fast vergessen. Das hier sagt die Java-Console:


```
java.security.AccessControlException: access denied (java.io.FilePermission wuerfel.gif read)

	at java.security.AccessControlContext.checkPermission(Unknown Source)

	at java.security.AccessController.checkPermission(Unknown Source)

	at java.lang.SecurityManager.checkPermission(Unknown Source)

	at java.lang.SecurityManager.checkRead(Unknown Source)

	at sun.awt.SunToolkit.getImageFromHash(Unknown Source)

	at sun.awt.SunToolkit.getImage(Unknown Source)

	at Ausgabe.<init>(Ausgabe.java:27)

	at Madn.init(Madn.java:8)

	at sun.applet.AppletPanel.run(Unknown Source)

	at java.lang.Thread.run(Unknown Source)
```


----------



## moe (8. Mrz 2005)

Wow ich hab das gif ma weggemacht was als Icon diente. Und es geht !!!! Er öffnet zwar ein neues Fenster indem das Spiel startet aber schei* was drauf 
yeaha


----------



## Sky (9. Mrz 2005)

moe hat gesagt.:
			
		

> Wow ich hab das gif ma weggemacht was als Icon diente. Und es geht !!!! Er öffnet zwar ein neues Fenster indem das Spiel startet aber schei* was drauf
> yeaha



Das er ein neues Fenster öffnet, das liegt am Frame...

Das Du uns die Consonle vorenthalten hast finde ich gelinde gesagt etwas ärgerlich...!


----------



## Guest (9. Mrz 2005)

Entschuldige
Nur irgendwie ist mir die Console abgestürzt bzw. es kommt nichts mehr dadrin.

Mein Problem war halt das gif bild was ich als icon gemacht habe.
Ich bin im Moment noch in der Schule. Wenn ich nachher noch etwas Zeit habe und wenn das Internet wieder halbwegs geht versuch ichs nochma!


----------

