Java-Applet Probleme beim Browser

Gustl_Java

Aktives Mitglied
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.
 
Zuletzt bearbeitet:
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?
 
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
rem *
rem * Erzeugen eines eigenen Schlüssels
rem * Mit KeyTool, einem Werkzeug aus dem SDK, einen neuen Schlüssel erzeugen:
rem * keytool -genkey -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend Dein Passwort ein.
rem
rem * Erzeugen eines Zertifikats
rem * Mit KeyTool Zertifikat erzeugen:
rem * keytool -selfcert -alias Signer -dname "cn=Dein Name, c=de"
rem * Gib anschließend dein Passwort ein.
rem *
rem * Signieren des Applets
rem * Signieren des Applets mit Hilfe des Tools jarsigner
rem * jarsigner signed.jar Signer
rem * Und noch einmal dein Passwort eingeben.

echo = SignTool =
echo Dieses Tool hilft beim Erzeugen von signierten jar-Dateien
echo.
echo Schritt 1: jar-Dateien erzeugen
echo -------------------------------

rem Pfad zum SDK setzen
rem --> anpassen!
set path=.;C:\Programme\Java\jdk1.6.0_16\bin

echo Manifestdatei erzeugen...
echo Manifest-Version: 1.0>manifest.mf
echo Created-by: SignTool by L-ectron-X>>manifest.mf
echo.>>manifest.mf

if exist *.jar goto key
echo jar-Datei mit angegebenen Parametern erzeugen...
rem --> anpassen!
rem * In diesem Beispiel werden alle .class-Dateien und die Verzeichnisse bilder und etc
rem * mit ins jar-Archiv gepackt.
jar cfmv Game.jar manifest.mf *.class img

:key
echo.
echo Schritt 2: Schluessel generieren
echo --------------------------------
rem --> anpassen!
keytool -genkey -alias Signer -dname "cn=Joerg Haefner, c=de"

echo.
echo Schritt 3: Zertifikat erzeugen
echo ------------------------------
rem --> anpassen!
rem -validity 18250 (365 Tage x 50) erzeugt ein 50 Jahre gültiges Zertifikat
keytool -selfcert -validity 3650 -alias Signer -dname "cn=Joerg Haefner, c=de"

if not exist *.jar goto error
echo.
echo Schritt 4: jar-Datei signieren
echo ------------------------------
echo jarsigner erwartet hier nochmals dein Passwort.
rem --> anpassen!
jarsigner Game.jar Signer

echo.
echo Schritt 5: Zertifikat testen
echo ----------------------------
rem --> anpassen!
jarsigner -verify -verbose -certs Game.jar
goto end

:error
echo.
echo Es wurde keine jar-Datei zum Signieren gefunden.
echo Die Erzeugung der jar-Datei ist moeglicherweise fehlgeschlagen.
echo Pruefe deine Eingaben in der Batchdatei!

:end
if not exist manifest.mf goto console
echo.
rem Manifest von Festplatte löschen
del manifest.mf

:console
rem Console für Ausgaben noch geöffnet lassen
echo.
pause

hat alles geklappt. Dann habe ich alle Dateien auf meinen Server ins verzeichnis "test" gelegt und in der viergewinnt.html steht folgendes:
Code:
<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)
at java.lang.SecurityManager.checkRead(Unknown Source)
at sun.awt.SunToolkit.getImageFromHash(Unknown Source)
at sun.awt.SunToolkit.getImage(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at javax.swing.ImageIcon.<init>(Unknown Source)
at VierGewinnt.init(VierGewinnt.java:31)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Ausnahme: java.security.AccessControlException: access denied (java.io.FilePermission img//blank.png read)
Laden: Klasse game.jar nicht gefunden
java.lang.ClassNotFoundException: game.jar
at sun.plugin2.applet.Applet2ClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.plugin2.applet.Plugin2ClassLoader.loadCode(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.io.FileNotFoundException: D:\Programming\_projekte_java\4gewinnt_applet\new\game\jar.class (Das System kann den angegebenen Pfad nicht finden)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(Unknown Source)
at java.io.FileInputStream.<init>(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.connect(Unknown Source)
at sun.net.www.protocol.file.FileURLConnection.getInputStream(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.getBytes(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader.access$000(Unknown Source)
at sun.plugin2.applet.Applet2ClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
... 7 more
 
Aber solch ein Programm funktioniert auch ohne signieren.
Code:
public class HelloWeb extends java.applet.Applet {
  public void paint(java.awt.Graphics gc) {
    gc.drawString("Hello Web!", 50, 50);
  }
}
html:
Code:
<html>
<head>
</head>
<body>
<Applet code="HelloWeb.class" width="200" height="200"></Applet>
</body>
</html>
 
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?
 
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.
 
Zuletzt bearbeitet:
Danke,

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

Code:
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:
Code:
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...
 
Zuletzt bearbeitet:
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ß
 
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:
Code:
 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);
      ......
 

Neue Themen


Zurück
Oben