Mensch ärgere dich nicht Applet

Status
Nicht offen für weitere Antworten.

moe

Mitglied
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:
Code:
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

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

Ansonsten: Verstehe die Frage nicht genau...
 
G

Guest

Gast
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.
 
G

Guest

Gast
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

Top Contributor
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

Top Contributor
Ist die Klasse "Ausgabe" public? Also

Code:
public class Ausgabe
und in der Datei Ausgabe.java gespeichert??
 
G

Guest

Gast
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
 
G

Guest

Gast
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

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

Code:
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);
  }
}
 
G

Guest

Gast
Code:
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

Code:
<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

Top Contributor
Code:
 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!
 

Sky

Top Contributor
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
 
G

Guest

Gast
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?
 
G

Guest

Gast
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
 
G

Guest

Gast
sky80 hat gesagt.:
Code:
 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!

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

Mitglied
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!?
 

moe

Mitglied
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

Top Contributor
Anonymous hat gesagt.:
sky80 hat gesagt.:
Code:
 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!

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.

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

Mitglied
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

Gesperrter Benutzer
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

Mitglied
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

Mitglied
Code:
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:
Code:
import java.awt.*;
import java.awt.event.*;

public class Ausgabe extends Frame
{

Kann mir keiner helfen!?
 

moe

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

Code:
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

Mitglied
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

Top Contributor
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...!
 
G

Guest

Gast
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!
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Mensch Ärger dich nicht Spiel Tools - Maven, Gradle, Ant & mehr 1

Ähnliche Java Themen

Neue Themen


Oben