# Java-Applet Probleme beim Browser



## Gustl_Java (11. Mrz 2010)

Hallo,

ich habe nun mein erstes Applet geschrieben, nun habe ich folgende kommanos in der console eingegeben:

javac prog.java
--> hat funktioniert
appletviewer prog.html
--> das gewünschte Programm ist auch im Viewer und läuft.

Mein Problem ist jetzt das es leider nicht lokal mit meinem firefox läuft, habe es auch schon auf einen Server probiert. Es kommt immer: "Fehler! Klicken sie hier um weiter Informationen zu erhalten."

Installiert muss jdk aber im browser sein, ist firefox 3.5.8 und andere Seiten mit applets funktionieren auch.
Was mache ich falsch?

Dank schonmal für die Hilfe.
Gruß Gustl

Edit: Sehe gerade das dieses Thema wohl doch eher was für dem Unterforum Java-Basics ist, sry. Das nächste mal dann.


----------



## L-ectron-X (11. Mrz 2010)

http://www.java-forum.org/applets/4482-verweigert-browser-anzeige-java-applets.html
Hilft das? Wenn nicht, die genaue Fehlermeldung aus der Java-Konsole posten.


----------



## Gustl_Java (12. Mrz 2010)

Hallo, danke, es wird dann wohl daran liegen weil mein applet nicht signiert wurde.

Aber ich komme da an dieser Stelle einfach nicht weiter.

Ich habe 2 class Dateien und einen ordner "img" wo drei bilder drin sind.
Signieren kann ich aber nur eine jar Datei oder?
Ein Zertifikat habe ich erstellt, zumindest glaube ich das.
Mein Java-Editor kann aber keine .jar von meinem projekt erzeugen, er kann es nicht mal kompilieren, da ihm die main fehlt. Kompiliert habe ich es mit javac.
Aber eine jar Datei bekomme ich einfach nicht aus meinem Projekt auf Konsolenebene.
Könnte mir da einer helfen?
Eingabe: jar c game.jar VierGewinnt.class
aber es funktioniert nicht, hier vermisst er die .jar Datei, sagt die existiert nicht. klar existiert diese nicht, da er sie ja erzeugen soll...

Wie mache ich da eine .jar Datei draus?


----------



## Gustl_Java (12. Mrz 2010)

Habe nun mit dem Befehl jar ein archiv erstellen können.

jar -cfv Game.jar VierGewinnt.class Game.class img
img ist der ordner mit den 3 Bilder.

Dann habe ich diese Bat Datei durchlaufen lassen:



> @echo off
> rem * SignTool by L-ectron-X ( Byte-Welt Forum - Powered by vBulletin )
> rem *
> rem * Ablauf beim Signieren
> ...



hat alles geklappt. Dann habe ich alle Dateien auf meinen Server ins verzeichnis "test" gelegt und in der viergewinnt.html steht folgendes:

```
<html><body>
<applet codebase="http://www.j-haefner.de/test" code="VierGewinnt.class" archive="Game.jar" width=410 height=400></applet>
</body></html>
```
Aber trotzdem kann er die Dateien nicht finden...

Fehlermeldung:


> java.security.AccessControlException: access denied (java.io.FilePermission img//blank.png read)
> at java.security.AccessControlContext.checkPermission(Unknown Source)
> at java.security.AccessController.checkPermission(Unknown Source)
> at java.lang.SecurityManager.checkPermission(Unknown Source)
> ...


----------



## Gustl_Java (12. Mrz 2010)

Aber solch ein Programm funktioniert auch ohne signieren.

```
public class HelloWeb extends java.applet.Applet {
  public void paint(java.awt.Graphics gc) {
    gc.drawString("Hello Web!", 50, 50);
  }
}
```
html:

```
<html>
<head>
</head>
<body>
<Applet code="HelloWeb.class" width="200" height="200"></Applet>
</body>
</html>
```


----------



## Gustl_Java (12. Mrz 2010)

da ich das alles importiere:

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.JOptionPane;

müssen diese Klassen dann auch in die .jar?
Geht das nicht irgendwie automatisch?
Muss ich da einen classpath setzen?
Wenn ja, wie binde ich diese externen öffentlichen Klassen ein?


----------



## Gustl_Java (12. Mrz 2010)

Kann denn keiner helfen? ;(


----------



## Gustl_Java (12. Mrz 2010)

Ich habe es nun zum laufen gebracht...

Könnte mir vielleicht wer sagen warum er die *.png Bilder aus meinem ordner img nicht anzeigt?

bzw. woran es liegen könnte?

in der jar habe ich diese mitaufgenommen, und diese jar habe ich signiert.


----------



## L-ectron-X (12. Mrz 2010)

Du brauchst das Applet normalerweise nicht wegen der Einbindung von Bildern signieren.
Das Problem ist, dass du die Bilder nicht über die getCodeBase()-Methode und URL einliest, sondern wahrscheinlich über File oder das Toolkit.
Grafikdateien laden und anzeigen - Byte-Welt Wiki


----------



## Gustl_Java (13. Mrz 2010)

Danke,

lokal funktioniert jetzt das applet im Browser, aber online kommt nun als Fehlermeldung in der Konsole:


```
java.lang.NullPointerException
	at javax.swing.ImageIcon.<init>(Unknown Source)
	at VierGewinnt.init(VierGewinnt.java:37)
	at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Ausnahme: java.lang.NullPointerException
```

Codeauszug:

```
public class VierGewinnt extends Applet
{
 JLabel[][] P;
   Panel P_up;
   Panel P_down;
   Label L1;
   ImageIcon image_blanko;
   ImageIcon image_red;
   ImageIcon image_blue;
   game Game;
   int player;
   boolean win;

   public void init()
   {
      java.net.URL imgURL1 = getClass().getResource("blank.png");
      java.net.URL imgURL2 = getClass().getResource("stone_red.png");
      java.net.URL imgURL3 = getClass().getResource("stone_blue.png");
      image_blanko = new ImageIcon(imgURL1); //<-- at VierGewinnt.init(VierGewinnt.java:37 ZEILE 37
      image_red    = new ImageIcon(imgURL2);
      image_blue   = new ImageIcon(imgURL3);
```

Aber die referenz zeigt doch auf das Objekt?
Was mache ich nun falsch?

Dazu kommt auch noch das es lokal und im compiler selbst oder appletviewer funktioniert, nur online nicht 

Hat sich erledigt, bei den Bildern ist auf dem Server PNG groß geschrieben...


----------



## L-ectron-X (13. Mrz 2010)

Es läuft nun also, auch ohne signieren?


----------



## Gustl_Java (13. Mrz 2010)

Nein, nur mit signieren.

aber musste dein script von der batch datei anpassen...

mit
jarsigner -verify -verbose -certs Game.jar
hat es leider nicht funktioniert.
aber mit:
jarsigner -signedjar sGame_4Gewinnt.jar Game_4Gewinnt.jar gj22
und dem schlüssel gj22 ging es dann.
Vielleicht habe ich beim erstellen von dem Schlüssel oder Zertifikat... irgendetwas falsch gemacht. egal, es geht.

VierGewinnt-Applet

Gruß


----------



## L-ectron-X (13. Mrz 2010)

Wie gesagt, es geht auf jeden Fall, ohne zu signieren.
Poste mal den aktuellen Code, wo du die Bilder lädst und einbindest.


----------



## Gustl_Java (13. Mrz 2010)

Stimmt, geht auch mit der .jar die nicht signiert ist. 

Lag wohl doch an den Image einbinden...

Egal, aber jetzt weiß ich auch wie man solche eine jar signiert. 

Wann muss man diese denn dann signieren?

So habe ich es dann gelöst:

```
ImageIcon image_blanko;
   ImageIcon image_red;
   ImageIcon image_blue;
   game Game;
   int player;
   boolean win;

   public void init()
   {  java.net.URL imgURL1 = getClass().getResource("blank.png");
      java.net.URL imgURL2 = getClass().getResource("stone_red.png");
      java.net.URL imgURL3 = getClass().getResource("stone_blue.png");
      //Erstellung der Komponenten
      image_blanko = new ImageIcon(imgURL1);
      image_red    = new ImageIcon(imgURL2);
      image_blue   = new ImageIcon(imgURL3);
      ......
```


----------



## L-ectron-X (14. Mrz 2010)

Gustl_Java hat gesagt.:


> Wann muss man diese denn dann signieren?


Immer dann, wenn du für den und auf dem Client sicherheitskritische Operationen ausgeführt werden sollen. Bspw. das Laden von Dateien, die Verbindung zu einem anderen Server, den Rechner herunter fahren etc.


----------

