# Applet Fehler: java.lang.reflect.InvocationTargetException



## Xym13 (16. Sep 2012)

Hallo zusammen,

ich habe die Applet fertig geschrieben. In Eclipse läuft es ohne Probleme. Auch im Java Editor bekomme ich keine Fehlermeldung. Doch wenn ich dann die HTML Datei aufrufe, die der Java Editor selbst erstellet, bekomme ich im Browser die Fehlermeldung: java.lang.reflect.InvocationTargetException

Das hier stand unter Details:
Java-Plug-in 10.7.2.11
JRE-Version verwenden 1.7.0_07-b11 Java HotSpot(TM) Client VM
Benutzer-Home-Verzeichnis = C:\Users\Jan

Und das hier ist die HTML Datei:

```
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>game.Main-Applet</title>
<meta http-equiv="Content-Type" content="text/html;charset=ISO-8859-1">
</head>
<body>
<h1>game.Main-Applet</h1>
<hr>
<applet code="game/Main.class"  width="300" height="300">
</applet>
<hr>
</body>
</html>
```

Jetzt verstehe ich nicht, warum es in den Editoren funktioniert, aber in den Browsern nicht..


----------



## pappawinni (16. Sep 2012)

wo liegt denn dein HTML-File und wo dein class-File.
Passt das denn zu der Angabe:

```
<applet code="game/Main.class"  width="300" height="300">
```


----------



## Xym13 (16. Sep 2012)

Ja das passt. Der Java Editor hat die Datei erstellt.


----------



## pappawinni (16. Sep 2012)

Dass der Java-Editor das erstellt hat, besagt nicht viel.
Schau doch mal wo deine Files tatsächlich liegen..


----------



## Xym13 (16. Sep 2012)

Ja, das passt.

Die HTML Datei liegt im Ordner "src". Dort befindet sich ebenfalls der Ordner "game".
Im Ordner game sind dann die Class und Jar Dateien.


----------



## pappawinni (16. Sep 2012)

Jar? dann musst du vermutlich noch "archives" reinflicken.

<applet code="game/main.class" archives="wasweissich.jar" width="100" height="100">
</applet>


----------



## pappawinni (16. Sep 2012)

Nehmen Sie zur Kenntnis das einige Browser, das ARCHIVE-Attribut nicht unterstützen, daher sollten alle nötigen Dateien auch nicht archiviert zur Verfügung stehen. Andere Browser unterstützen nur eine URL als ARCHIVE-Wert.

APPLET - Java Applet


----------



## Xym13 (16. Sep 2012)

Ich hab jetzt erstmal alles in einen Ordner verschoben, damit ich ein problem damit schonmal ausschließen kann.

Mir ist gerade auch noch eingefallen, dass ich die Applet mit dem <object> Tag einbinden muss, da die Applet noch Informationen von der Internetseite braucht.

Hatte aus einem Post aus diesem Forum den Teil kopiert und angepasst:

```
<object archive="Main.jar" classid="java:Main.class" codetype="application/java-vm" width="400" height="400" />
</object>
```

Jetzt bekomme ich auf einmal als Fehler NullPointerException..


----------



## pappawinni (16. Sep 2012)

Sorry, ich seh nicht, warum du jetzt auf <object> wechselst ?
Glaub nicht dass das was bringt.


----------



## L-ectron-X (16. Sep 2012)

Xym13 hat gesagt.:


> Ja das passt. Der Java Editor hat die Datei erstellt.


Trotzdem ist es falsch!




pappawinni hat gesagt.:


> Nehmen Sie zur Kenntnis das einige Browser, das ARCHIVE-Attribut nicht unterstützen, daher sollten alle nötigen Dateien auch nicht archiviert zur Verfügung stehen. Andere Browser unterstützen nur eine URL als ARCHIVE-Wert.


Das ist eine Aussage, die heute keinen Bestand mehr macht. Praktisch alle heute verfügbaren Webbrowser können mit dem archive-Attribut sicher umgehen.




pappawinni hat gesagt.:


> Sorry, ich seh nicht, warum du jetzt auf <object> wechselst ?
> Glaub nicht dass das was bringt.


Vielleicht hat er mal in der FAQ nachgesehen, was du auch mal machen solltest! 
http://www.java-forum.org/applets/114668-java-applet-webseite-einbinden.html


----------



## pappawinni (16. Sep 2012)

Hab ich gelesen mein Freund.
Mich hatte <object> nicht wirklich weiter gebracht, als ich das Problem hatte.
Ich sehe auch noch nicht, was da der "Vorteil" sein soll.


----------



## L-ectron-X (16. Sep 2012)

Das W3C hat HTML4 und damit auch das object-Tag im Jahr 1999 verabschiedet.
Sinn und Zweck dieses Tags war und ist es, die damals sehr unterschiedlichen Varianten von Medieneinbindungen zu vereinheitlichen, zu vereinfachen und damit unter einen Hut zu bekommen.



pappawinni hat gesagt.:


> Mich hatte <object> nicht wirklich weiter gebracht, als ich das Problem hatte.


Hmm, und was hat dich weitergebracht, als du _das_ Problem hattest?


----------



## pappawinni (16. Sep 2012)

L-ectron-X hat gesagt.:


> Hmm, und was hat dich weitergebracht, als du das Problem hattest?



rhetorische Frage.


----------



## Xym13 (16. Sep 2012)

Also, das object Tag brauche ich, weil per PHP eine Spiele ID an die Applet übergeben werden soll. Hatte im Internet gelesen, dass man es so am besten macht.

Habe mir jetzt auch den ganzen FAQ Teil gelesen. Habe das Programm nun im Appletviewer getestet und dort hat es (nach ein paar Änderungen) funktioniert. Aber im Browser will es immer noch nicht funktionieren.

Eingebunden wird das Applet nun so:

```
<object code="game/Main.class" classid="java:game/Main.class" codetype="application/java-vm" width="400" height="300" />
</object>
```

Firefox gibt mir dann die Meldung : java.lang.reflect.InvocationTargetException
Die JRE Version im Browser ist: 1.7.0_07-b11
Und kompiliert wurde es auch mit jdk1.7.0_07


----------



## L-ectron-X (16. Sep 2012)

Das code-Attribut gehört zum Applet-Tag. Du mischst hier die beiden Tags miteinander.
Außerdem werden die Packages nicht mit Slash, sondern mit Punkt angegeben.

Probiers mal so:

```
<object classid="java:game.Main.class" 
    codetype="application/java-vm" width="400" height="300" />
</object>
```

Die Spiel-ID kannst du über Parameter ins Applet schleusen.


----------



## Xym13 (16. Sep 2012)

Hatte das code-Attribut eingefügt, weil es beim Appletviewer als Fehler ausgegeben war.

Auch die Änderungen helfen nicht weiter..


----------



## Spacerat (16. Sep 2012)

Wie es aussieht machst du im Applet irgendetwas mit Reflections, das schliesse ich aus der Exception. Das meiste davon kannst du in Applets aber wegen des SecurityManagers vergessen, du wirst da auch nur selten durch eine sonst auftretende "Access Denied"-Exception gewarnt (so sehen Anwender gleich, was da versucht wird und entsprechend sinkt deren Vertrauen).
Evtl. stimmen Pfade und das drum herum also doch und das Problem ist ein ganz anderes. Irgendwo an den Stellen in deinem Applet zu finden, wo du Reflection verwendest.
[EDIT]Im übrigen: Soweit ich weiss, wird im Code-Attribut auch die Punktnotation für Klassen erwartet. Ein Klassenpfad lässt sich per CodeBase bestimmen.[/EDIT]


----------



## pappawinni (16. Sep 2012)

Also, weils ja angeblich unbedingt <object> sein soll.
Ich hab jetzt ein paar Stunden investiert und meine, dass weil ich den IE verwende, das Ganze offenbar etwas anders aussehen muss, als man sonst so liest, oder ich hab mich vielleicht auch hundertmal vertippt, wer weiss:


```
<OBJECT 
  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
  width="200" height="200">
  <PARAM name="code" value="Applet1.class">
</OBJECT>
```

Das macht auch nix besseres als <applet>.

Mit sowas:

```
<object classid="java:Applet1.class" 
    codetype="application/java-vm" width="200" height="200" />
</object>
```

ging es nicht.
Jemand ne Idee, weshalb da noch mal ein Schrägstrich hinter height="200" steht ?


----------



## L-ectron-X (16. Sep 2012)

Es handelt sich um einen Tippfehler meinerseits.
Geht's denn wenigstens ohne Slash?


----------



## Spacerat (16. Sep 2012)

pappawinni hat gesagt.:


> Jemand ne Idee, weshalb da noch mal ein Schrägstrich hinter height="200" steht ?


Aber klar doch: Das ist ein implizites Close-Tag. Damit spart man sich "</object>", wenn man keine Parameter hat. Für HTML 4+ muss man aber dazu sagen, dass wenn man es verwendet, Parameter- gefolgt von dem eigentlichen "</object>"-Tag echte Fehler sind.


----------



## pappawinni (16. Sep 2012)

L-ectron-X hat gesagt.:


> Geht's denn wenigstens ohne Slash?



Nö, da kommt auch nur ein Rahmen mit rotem X oben links..


----------



## Spacerat (16. Sep 2012)

Spacerat hat gesagt.:


> Im übrigen: Soweit ich weiss, wird im Code-Attribut auch die Punktnotation für Klassen erwartet. Ein Klassenpfad lässt sich per CodeBase bestimmen.


Okay... da hat mich die Elektronik mächtig auf's Glatteis geführt: Nix da, Punktnotation... auch bei classid nicht. 
Ich wundere mich gerade, woher L-Ectron-X diese Info mit der classid hat, bei Oracle steht's zumindest ein wenig anders. Using APPLET, OBJECT and EMBED Tags (hier für Java5, bei 1.4.2 steht ungefähr das selbe und aktuelleres finde ich nicht )


----------



## L-ectron-X (16. Sep 2012)

Ich hab das so von selfhtml und Oracle. ???:L
Und ich möchte behaupten, dass es bei meinen Tests auch funktionierte...


----------



## pappawinni (16. Sep 2012)

Also ich bin 
dadurch
drauf gekommen, dass der IE wohl was anderes macht.


----------



## Spacerat (16. Sep 2012)

Hmm... okay. Meine Applet-Kenntnisse sind wohl auch nicht die aktuellsten. Wenn ich's mir überlege, dürfte diese IE-Geschichte mit der CLSID 2007 mit der "Beerdigung" der Microsoft-VM auch gestorben sein. Die SUN-JVM und folgernd auch die heutige Oracle-JVM hatten ja nie etwas mit Active-X zu tun und deswegen wohl auch keine CLSID. Vorstellbar, dass durch diese Unterscheidung eine spezielle JVM vorrausgesetzt wurde. Seltsamerweise funktioniert die Sache mit der CLSID auch heute noch im IE, nur das halt die Oracle-VM gestartet wird.
[OT]Das hat nach so vielen Jahren Abstinenz an Webseitenentwicklung meinerseits aber trotzdem einen üblen Beigeschmack: Wann werden diese Browserentwickler eigentlich mal Vernünftig, statt ständig ihr eigenes Süppchen zu kochen? Erst sollten Standards unterstüztzt werden, erst dann kann man sich über Extras unterhalten. Na was soll's. Wenigstens ist die Lage nicht mehr ganz so unerträglich wie vor 5 bis 10 Jahren.[/OT]


----------



## Guest2 (16. Sep 2012)

Moin,



Spacerat hat gesagt.:


> hier für Java5, bei 1.4.2 steht ungefähr das selbe und aktuelleres finde ich nicht



imho seit Java 6u10 können (und sollen?) Applets auch über JNLP gestartet werden. Auf der Oracle Seite gibt es einige Beispiele dazu. Z.B.:

Deploying an Applet
The next-generation Java Plug-In technology 

Viele Grüße,
Fancy


----------



## troll (16. Sep 2012)

also object-tag und classid für ie unter win ... gut .. das mag gehen ... aber dann auch NUR im IE unter Win ... kein anderer browser ... kein anderes OS ...

wenn es unbedingt object sein muss dann unterscheidet sich das ganze auch nicht vom applet-tag ... wobei das applet-tag immer noch funktioniert und am einfachsten ist (hab bis jetzt immer applet verwendet ... noch nie probleme gehabt ... warum also object ?)

@TO
ich vermute das du einfach falsch pfad-angabe hast oder im applet etwas tust was durch den security-manager schlicht untersagt wird ...
darum wäre es hier auch mal wichtig den code zu sehen ... denn offenbar scheint ja etwas mit diesem nicht zu stimmen ..

ansonsten : nimm einfach mal das package raus und versuch es so ...


----------



## pappawinni (16. Sep 2012)

> imho seit Java 6u10 können (und sollen?) Applets auch über JNLP gestartet werden. Auf der Oracle Seite gibt es einige Beispiele dazu. Z.B.:
> 
> Deploying an Applet
> The next-generation Java Plug-In technology



Ja, da war ich damals auch drauf getoßen, als ich mein erstes Applet teste wollte. Sieht ja auch seeeehr komfortabel einfach aus. :joke:
War mir aber nicht wirklich wichtig, wollt ja nur sehn, wie mein Applet im Browser aussehen könnte.
Dafür tat es <applet> allemal. 
Schon blöd, wenn man bloss um ein Applet in ne Web-Page einzubinden länger braucht, als das Applet zu schreiben.


----------



## Spacerat (16. Sep 2012)

troll hat gesagt.:


> also object-tag und classid für ie unter win ... gut .. das mag gehen ... aber dann auch NUR im IE unter Win ... kein anderer browser ... kein anderes OS ...


Hehe. :lol: Auf welchem OS gibt's denn den IE heutzutage noch so?


----------



## Xym13 (17. Sep 2012)

Hier ist erstmal mein Quelltext, hoffe, dass Ihr darin den Fehler seht.

Main.java

```
package game;

import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;

import javax.swing.JApplet;

public class Main extends JApplet implements MouseListener, MouseMotionListener {

  // Variablen
  
  private static final long serialVersionUID = 1L;


  Grafik grafik = new Grafik();
  
  int mouse_x;
  int mouse_y;
  
  int mouse_x_alt;
  int mouse_y_alt;

  
  public static Figur[][] spielfeld = new Figur[5][7];
  public static int[][] kasten = new int[6][6];
  
  // Init Funktion
  
  public void init() {
    add(grafik);
    addMouseListener(this);
    addMouseMotionListener(this);
    
    // Figuren positionieren
    
    spielfeld[0][0] = new Figur(0, "turm");
    spielfeld[0][6] = new Figur(1, "turm");
    
    spielfeld[1][0] = new Figur(0, "springer");
    spielfeld[1][6] = new Figur(1, "springer");
    
    spielfeld[2][0] = new Figur(0, "dame");
    spielfeld[2][6] = new Figur(1, "dame");
    
    spielfeld[3][0] = new Figur(0, "koenig");
    spielfeld[3][6] = new Figur(1, "koenig");
    
    spielfeld[4][0] = new Figur(0, "laeufer");
    spielfeld[4][6] = new Figur(1, "laeufer");
    
    for(int i=0;i<5;i++) {
      spielfeld[i][1] = new Figur(0, "bauer");
      spielfeld[i][5] = new Figur(1, "bauer");
    }
  }
  
  // MouseMotionListener
  
  public void mouseDragged(MouseEvent e) {
    
  }

  public void mouseMoved(MouseEvent e) {

  }
  
  // MouseListener

  public void mouseClicked(MouseEvent e) {

  }

  public void mouseEntered(MouseEvent e) {
    
  }

  public void mouseExited(MouseEvent e) {
    
  }

  public void mousePressed(MouseEvent e) {
    repaint();
    
    mouse_x = e.getX() / 60;
    mouse_y = e.getY() / 60;
    
    //showrects();
  }
  
  public void mouseReleased(MouseEvent e) {
    repaint();
    
    mouse_x_alt = mouse_x;
    mouse_y_alt = mouse_y;
    
    mouse_x = e.getX() / 60;
    mouse_y = e.getY() / 60;
    
    clearrects();
    move();   
  }  
  // Figur setzten
  
  public void move() {
    if(check()) {
      spielfeld[mouse_x][mouse_y] = spielfeld[mouse_x_alt][mouse_y_alt];
      spielfeld[mouse_x_alt][mouse_y_alt] = null;
    }
    
    boolean white = false;
    boolean black = false;
    
    for(int x=0;x<5;x++) {
    	for(int y=0;y<7;y++) {
    		if(spielfeld[x][y] != null) {
	    		if(spielfeld[x][y].figur == "koenig") {
	    			if(spielfeld[x][y].color == 0) {
	    				black = true;
	    			} else {
	    				white = true;
	    			}
	    		}
    		}
    	}
    }
    
    if(!white)
    	this.destroy();
    
    if(!black)
    	this.destroy();
  }
  
  // Zug überprüfen
  
  public boolean check() {
    if(spielfeld[mouse_x_alt][mouse_y_alt] != null) {
      if(spielfeld[mouse_x_alt][mouse_y_alt].color == 0) {
        switch(spielfeld[mouse_x_alt][mouse_y_alt].figur) {
        
        // ------------------- Bauer --------------------
        case "bauer":
          
          break;
          
        // ------------------- König --------------------
        case "koenig":
       
        break;
          
        // ------------------- Läufer --------------------
        case "laeufer":
        
        break;
        
        // ------------------- Turm --------------------
        case "turm":  
      
        break;
        
        // ------------------- Dame --------------------
        case "dame":  
        
        break;
        
        // ------------------- Springer --------------------
        case "springer":  
       
        break;
        }
        
      } else { 
        // ----------- WEIßE FIGUREN ----------------
        switch(spielfeld[mouse_x_alt][mouse_y_alt].figur) {
        
        // ------------------- Bauer --------------------
        case "bauer":
        
          break;
          
        // ------------------- König --------------------
        case "koenig":
         
          break;
          
        // ------------------- Läufer --------------------
        case "laeufer":
       
        break;
        
        // ------------------- Turm --------------------
        case "turm":
          
        break;
        
        // --------------- Dame --------------
        case "dame":
          
        break;
        
        // -------------- Springer -------------------
        case "springer":
    
        break;
        
        
        }
      }
    }
    
    return false;
  }
  
  public static void main(String args[]) {
    new Main();
  }

}
```

Habe hier den Teil der Überprüfung mal weggelassen, da er echt lang ist. Sind nur vergleiche mit dem Array spielfeld. Und je nach dem wird true oder false zurück gegeben.

Grafik.java

```
package game;

import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;
import javax.swing.ImageIcon;
import javax.swing.JComponent;

public class Grafik extends JComponent{
  
  private static final long serialVersionUID = 1L;
  Image bauer_weis;
  Image bauer_schwarz;
  Image koenig_weis;
  Image koenig_schwarz;
  Image dame_weis;
  Image dame_schwarz;
  Image laeufer_weis;
  Image laeufer_schwarz;
  Image springer_weis;
  Image springer_schwarz;
  Image turm_weis;
  Image turm_schwarz;
  
  Figur spielfeld[][] = game.Main.spielfeld;
  int kasten[][] = game.Main.kasten;
  
  public Grafik() {   
   bauer_weis = new ImageIcon("game/bauer_weis.png").getImage();
   bauer_schwarz = new ImageIcon("game/bauer_schwarz.png").getImage();
   koenig_weis = new ImageIcon("game/koenig_weis.png").getImage();
   koenig_schwarz = new ImageIcon("game/koenig_schwarz.png").getImage();
   dame_weis = new ImageIcon("game/dame_weis.png").getImage();
   dame_schwarz = new ImageIcon("game/dame_schwarz.png").getImage();
   laeufer_weis = new ImageIcon("game/laeufer_weis.png").getImage();
   laeufer_schwarz = new ImageIcon("game/laeufer_schwarz.png").getImage();
   springer_weis = new ImageIcon("game/springer_weis.png").getImage();
   springer_schwarz = new ImageIcon("game/springer_schwarz.png").getImage();
   turm_weis = new ImageIcon("game/turm_weis.png").getImage();
   turm_schwarz = new ImageIcon("game/turm_schwarz.png").getImage();
  }   
  
  public void paintComponent(Graphics g) {
    super.paintComponent(g);
    spielfeld = game.Main.spielfeld;
    kasten = game.Main.kasten;
    
    
    // Schachbrettmuster
    
    g.setColor(Color.black);
    g.fillRect(0, 0, 300, 360);
    
    for(int x=0;x<5;x+=2) {
      for(int y=0;y<8;y++) {
        g.setColor(Color.white);
        g.fillRect(x * 60, y * 60, 60, 60); 
      }
    }
    
    for(int x=0;x<5;x++) {
      for(int y=0;y<8;y+=2) {
        g.setColor(Color.white);
        g.fillRect(x * 60, y * 60, 60, 60); 
      }
    }
    
    for(int x=0;x<5;x+=2) {
      for(int y=0;y<8;y+=2) {
        g.setColor(Color.black);
        g.fillRect(x * 60, y * 60, 60, 60); 
      }
    }
    
    // Figuren
    
    for(int x=0;x<5;x++) {
      
      for(int y=0;y<7;y++) {
        
        if(spielfeld[x][y] != null) {         
          // Schwarze Figuren zeichnen
          if(spielfeld[x][y].color == 0) {
            switch(spielfeld[x][y].figur) {
              case "bauer":
              g.drawImage(bauer_schwarz, x * 60, y * 60, 60, 60, null);
              break;
              case "koenig":
              g.drawImage(koenig_schwarz, x * 60, y * 60, 60, 60, null);
              break;
              case "dame":
              g.drawImage(dame_schwarz, x * 60, y * 60, 60, 60, null);
              break;
              case "laeufer":
              g.drawImage(laeufer_schwarz, x * 60, y * 60, 60, 60, null);
              break;
              case "springer":
              g.drawImage(springer_schwarz, x * 60, y * 60, 60, 60, null);
              break;
              case "turm":
              g.drawImage(turm_schwarz, x * 60, y * 60, 60, 60, null);
              break;
            }
          }   
          
          // Weiße Figuren zeichnen
          else if(spielfeld[x][y].color == 1) {
            switch(spielfeld[x][y].figur) {
              case "bauer":
              g.drawImage(bauer_weis, x * 60, y * 60, 60, 60, null);
              break;
              case "koenig":
              g.drawImage(koenig_weis, x * 60, y * 60, 60, 60, null);
              break;
              case "dame":
              g.drawImage(dame_weis, x * 60, y * 60, 60, 60, null);
              break;
              case "laeufer":
              g.drawImage(laeufer_weis, x * 60, y * 60, 60, 60, null);
              break;
              case "springer":
              g.drawImage(springer_weis, x * 60, y * 60, 60, 60, null);
              break;
              case "turm":
              g.drawImage(turm_weis, x * 60, y * 60, 60, 60, null);
              break;
            }
          }  
        }          
      }             
    }
  }
}
```

Figur.java

```
package game;


public class Figur {

	int color;	
	String figur = "";

	public Figur (int color, String text) {
		this.color = color;
		this.figur = text;		
	}
}
```


----------



## Spacerat (17. Sep 2012)

[OT]0. Kann es sein, dass dein Schachbrett nicht so ganz einem allgemeinen Schachbrett entspricht? Die Zahlen lassen zumindest darauf schliessen (0 bis 7 statt 0 bis 6)[/OT]

Zum Thema:
1. Ein Applet mit 'ner main-methode? Wird das Applet in der IDE etwa als Applikation ausgeführt oder als Applet gestartet? Die main-methode ist zumindest erst mal überflüssig.
2. Sind die Pfade der Bilder Ressourcen im Jar oder liegen die im Verzeichnis "game" auf dem Rechner? Kann sein, dass diese nicht geladen werden und es dadurch zu NPEs kommt.
3. Immer noch schwer zu sagen, woher diese "java.lang.reflect.InvocationTargetException" kommt. Im Code ist's meiner Ansicht nach jedenfalls nicht erkennbar.


----------



## Xym13 (17. Sep 2012)

Die Anzahl der Felder ist gewollt nicht 8x8, es sollte eine abgewandelte Version werden.

Die Main Methode hab ich entfernt, aber ohne Erfolg.
Die Bilder liegen in dem Ordner "game". Zur Sicherheit hatte ich nochmal im Ordner selbst einen Ordner game angelegt, damit dieser Pfad auf jedenfall stimmt.

Hier nochmal zur Übersicht die Ordnerstrucktur:

src | - game(Ordner)      | - game(Ordner)                            | - Bilder
     | - index.html           | - Bilder
                                  | - Class & Java & Jar Dateien


----------



## Spacerat (17. Sep 2012)

:rtfm: Nu' wird's aber ernst... Ich bekomm's auch nicht hin... entweder ich bekomm 'nen Fehler angezeigt oder die JVM stürzt ab. Hat evtl. mal jemand auf die schnelle 'nen Link zu 'nem Online-Applet das funktioniert?


----------



## F.S.WhiTeY (17. Sep 2012)

Homepage von Arndt Brünner

Da sollten neben JS auch Apllets vorhanden sein. Nebenbei bemerkt für Mathe ne echt coole seite.

Edit:

Das sollten Applets sein: Testseiten fr Java-Applets


----------



## L-ectron-X (17. Sep 2012)

Spacerat hat gesagt.:


> Hat evtl. mal jemand auf die schnelle 'nen Link zu 'nem Online-Applet das funktioniert?


Auch hier hilft die FAQ  
SystemInfo-Applet (signiert) - java-forum.org
http://www.java-forum.org/applets/126954-test-browser-applets-ausfuehren.html

Allerdings ist da jeweils (aus Kompatibilitätsgründen) das Applet-Tag benutzt worden.


----------



## Spacerat (17. Sep 2012)

Okay... das Applet-Tag klappt schon mal. Muss wohl mal meine Kenntnisse auffrischen.


----------



## Xym13 (17. Sep 2012)

Und wie hat es jetzt bei dir funktioniert?


----------



## L-ectron-X (17. Sep 2012)

Entferne mal die main()-Methode aus dem Applet, die hat darin nichts zu suchen.
Dein Applet sollte dann im Applet-Tag und auch im Object-Tag funktionieren. (Siehe oben bzw. FAQ)


----------



## Spacerat (17. Sep 2012)

@TO: Ich meine, dass mein Java-Plugin im Browser funktioniert. Hatte schon befürchtet, dass da was im Argen war, weil gar nichts mehr starten wollte. Der Fehler war aber ein anderer und zwar, konnte die Klasse Main die Klasse Grafik nicht finden. Anscheinend müssen Applets, die aus Mehreren Klassen bestehen zwangsläufig in ein Jar. Das hatte ich anders in Erinnerung.
Dein Problem lässt sich anscheinend nur lösen, wenn du die Bildpfade einzeln als Parameter übergibst oder die Bilder mit ins Jar packst. Innerhalb des Jars aber müsste dann per Ressource-URL darauf zugegriffen werden ([c]getClass().getRessource("bild.png")[/c], wenn Grafik und die Bilder im selben Verzeichnis im Jar liegen).


----------



## L-ectron-X (17. Sep 2012)

Spacerat hat gesagt.:


> Anscheinend müssen Applets, die aus Mehreren Klassen bestehen zwangsläufig in ein Jar.


Nein, nicht zwingend, ist aber immer von Vorteil.
Ich habe nur die main()-Methode entfernt, neu kompiliert, den Tag entsprechend angepasst und schon gings. (Zumindest ohne Bilder, die sind hier nicht beigefügt worden.)


----------



## pappawinni (17. Sep 2012)

L-ectron-X hat gesagt.:


> Allerdings ist da jeweils (aus Kompatibilitätsgründen) das Applet-Tag benutzt worden.



Na sowas, das ist jetzt aber nicht konsequent. 
Erst erzählen, dass <objekt> das einzig Wahre wäre und dann <applet> verwenden, das ham wer gern.:lol:


----------



## troll (17. Sep 2012)

bin mir zwar nicht sicher ... aber es könnte daran liegen WIE du die images erzeugst ..

laut API ist beim konstruktor ImageIcon(String) der parameter eine PFAD-angabe ... das ganze wird an Toolkit delegiert wo es als abstract steht ... aber ich denke mal es wird versucht ein File-Objekt zu öffnen was dann in einer SecurityException endet und zwangsläufig zur InvocationTargetException führt (laut API wird diese nämlich nur dann geworfen wenn die gecallte methode eine exception wirft) ...

ergo : du lädst die bilder einfach falsch ... nutze stattdessen ImageIO und ClassLoader.getResourceAsStream() ... das dürfte die lösung sein da du so nun nicht mehr gegen die sandbox verstößt (wie ich ja vermutet hatte) sondern konform mit dieser gehst ...
vielleicht hätte dir der FAQ-beitrag "wie lade ich bilder in einem applet" weitergeholfen ...


----------



## Spacerat (17. Sep 2012)

troll hat gesagt.:


> bin mir zwar nicht sicher ... aber es könnte daran liegen WIE du die images erzeugst ..
> 
> laut API ist beim konstruktor ImageIcon(String) der parameter eine PFAD-angabe ... das ganze wird an Toolkit delegiert wo es als abstract steht ... aber ich denke mal es wird versucht ein File-Objekt zu öffnen was dann in einer SecurityException endet und zwangsläufig zur InvocationTargetException führt (laut API wird diese nämlich nur dann geworfen wenn die gecallte methode eine exception wirft) ...
> 
> ...


 :autsch: natürlich... (zu viele Bäume hier. Hab' den Wald gar nicht gesehen
[EDIT]Ach ja... so klappt's dann auch mit <object>[/EDIT]


----------



## Xym13 (17. Sep 2012)

Na endlich!! Es geht nun!
*
Vielen Dank, dass ihr mir alle so toll geholfen hab!*


----------



## troll (18. Sep 2012)

Spacerat hat gesagt.:


> :autsch: natürlich... (zu viele Bäume hier. Hab' den Wald gar nicht gesehen
> [EDIT]Ach ja... so klappt's dann auch mit <object>[/EDIT]



das ist mir sogar als erste idee gekommen ... denn InvocationTargetException wird nämlich unter anderem von java.lang.reflect.Method.invoke(Object, Object...) geworfen wenn (laut api) die gecallte methode eine exception wirft ... und so weit ich weis arbeitet das applet-plugin nämlich (wie auch der rest der VM) intern mit reflections ...

ergo : verstoß gegen securitymanager ... und nun natürlich mal rätzeln warum ... (was ohne code ja so nicht ging) ...
und da der fehler ja nun offensichtlich war , nämlich das versucht wird mit normalen File-objekten auf daten zuzugreifen , was ja laut sandbox nicht erlaubt ist , konnte man diesen auch einfach lösen in dem man TO zeigt wie es "richtig" geht ...

war erlich gesagt ziemlich belustigt von den ganzen fehlversuchen und einem flame-war applet-vs-object - tags ... und keiner hat auch nur ansatzweise mitkommen wodurch der fehler eigentlich verursacht wurde ... und sowas natürlich immer wieder von usern denen man eigentlich mitlerweile die kompetenz zutrauen würde da das thema ja auch immer wieder gerne gestellt und meist nur mit dem verweis auf die FAQ beantwortet und gelöst wird ...


----------



## L-ectron-X (18. Sep 2012)

pappawinni hat gesagt.:


> Na sowas, das ist jetzt aber nicht konsequent.


Genau! Man muss auch daran denken, dass es noch ältere Browser und Java-Versionen gibt. 



Spacerat hat gesagt.:


> :autsch: natürlich... (zu viele Bäume hier. Hab' den Wald gar nicht gesehen
> Ach ja... so klappt's dann auch mit <object>


Hehe, ging mir auch so. Noch schlimmer, weil ich genau das sonst auch immer predige... 

@troll: Ja-ja... hast ja Recht. Aber zumindest erhebe ich mich auch nicht dazu, immer alles richtig zu machen. ^^


----------

