JApplet über Webbrowser ausführen?

bruce85

Bekanntes Mitglied
Hallo,
ich habe ein kleines problem und zwar, wenn ich mein Programm über Internet Explorer ausführe, dann sind keine Bilder geladen, in NetBeans werden sie aber geladen.
Im Archiv .jar sind die Bilder vorhanden "img/bild.png" u.s.w.

So lade ich die Bilder:
Java:
        bild1 = Toolkit.getDefaultToolkit().createImage("img/bild1.PNG");
        bild2 = Toolkit.getDefaultToolkit().createImage("img/bild2.PNG");
        bild3 = Toolkit.getDefaultToolkit().createImage("img/bild3.PNG");

        MediaTracker mt = new MediaTracker(this);
        mt.addImage(bild1, 0);
        mt.addImage(bild2, 1);
        mt.addImage(bild3, 2);
        try {
            mt.waitForAll();
        } catch (Exception e) {  }

Hier der Speicherort, wo die Bilder abgelegt sind:
Code:
C:\Users\User\Documents\NetBeansProjects\Game\img

Wenn ich nun mein Projekt in NetBeans starte, dann werden ja die Bilder angezeigt, nur wenn ich mein Programm über Internet Explorer ausführe, dann werden keine Bilder angezeigt.

Kann mir Vielleicht jemand helfen, wo das Problem liegen könnte?
Ich danke euch schonmal für die Hilfe.

MfG
 
das die bilder mit im jar liegen stimmt schon soweit ...
natürlich müssen diese auch relativ zur klasse im richtigen verzeichnis sein

das problem ist vielmehr der aufruf

um daten innerhalb eines jars in einem applet zu laden brauchst du ClassLoader.getResource() bzw getResourceAsStream() ... denn sonst versucht das applet die daten außerhalb des jars zu suchen ... was natürlich fehlschlägt ...

es liegt also nicht daran wie du dein applet auslieferst ... sondern daran wie du die daten innerhalb des applets laden willst
 
Liegt evtl. an den relativen Pfand angeben. Aber es stimmt schon, was irgendjemand schreibt, diese sollten vollständig angegeben werden.
 
Zuletzt bearbeitet von einem Moderator:
Ich danke euch für die antworten.

Ich hab das mal so versucht:
Java:
ImageIcon b = new ImageIcon(Game.class.getResource("img/bild1.png"));
bild1 = b.getImage();

leider bekomme ich eine fehlermeldung beim Kompilieren:
Java:
Exception in thread "main" java.lang.NullPointerException

Kann mir Vielleicht jemand ein beispiel Posten, wie ich das Problem lösen könnte?
Auf der Seite Grafikdateien laden und anzeigen ? Byte-Welt Wiki hab ich schon bereits nachgelesen, leider bekomm ich das irgendwie nicht richtig hin.

Ich danke euch schonmal.

MfG
 
Die NPE kommt nicht beim kompilieren, sondern beim Ausführen weil das Bild nicht gefunden wurde. Probiere es mal mit einem Slash vor img, also
Code:
...getResource("/img/bild1.png"));
Oder lege die Bilder parallel zum jar auf dem Server ab, dann sollte die Variante getCodeBase() funktionieren.
 
Spätestens, wenn du das Applet ausführen wolltest, wäre dir die Version aus deinem Eingangspost mit einer [JAPI]AccessControlException[/JAPI] um die Ohren geflogen.
[JAPI]Toolkit[/JAPI] sucht auf der Client-Festplatte nach den Bilddateien, was ein Applet aber nicht darf...
 
Danke Dir.
Ich hab noch ein kleines Problem:
Wenn ich mein Programm auf meinem Server hochlade und es per Browser starten möchte, dann wird nur die Startdatei heruntergeladen und kann dann natürlich nicht gestartet werden, da die .jar datei ja dann nicht gefunden wereden kann.
NetBeans erstellt mir folgende dateien:
Code:
C:\Users\User\Documents\NetBeansProjects\Game
    manifest
    master-application.jnlp
    preview-application.html
C:\Users\User\Documents\NetBeansProjects\Game\dist
    Game.jar
    launch.html
    launch.jnlp

Wenn ich die launch.html über meinem Server ausführe, dann befindet sich auf der Seite einen Button, um das Programm zu starten.
Wenn ich dann dort drauf klicke, dann fragt mich FireFox ob ich es speichern oder direkt öffnen möchte.
Ich Klick dann auf öffnen und erhalte dann folgende fehlermeldung:
Code:
java.io.FileNotFoundException: C:\Users\USER~1\AppData\Local\Temp\Game.jar (Das System kann die angegebene Datei nicht finden)

Wie kann ich das beheben?

MfG
 
Danke Dir.
Wenn ich es direkt im Browser darstellen lass, dann erhalte ich eine Fehlermeldung:
Code:
Fehler. Klicken Sie, um weitere Informationen zu erhalten.

Hier mal meine Game und Solitaire.java Datei:
Game.java:
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package game;
import java.applet.*;
import java.awt.*;
/**
 *
 * @author Christian
 */
public class Game extends Applet {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        new Solitaire();
    }
}

Solitaire.java
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package game;
import javax.swing.JFrame;
/**
 *
 * @author Christian
 */
public class Solitaire extends JFrame {
    public Solitaire() {
        setSize(400,400);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        add(new SolitaireCanvas());
        setVisible(true);
    }
}

Ich benutze bei Solitaire.java JFrame, muss ich das ändern um mein Programm direkt im Browser anzeigen lassen zu können?

Sry, ich war vorhin etwas durcheinander, deshalb kam da nur misst raus. 😀

Danke schonmal.

MfG
 
Ein Applet kennt keine main()-Methode. Es wird vom Browser über die init()-Methode initialisiert.

Versuchs mal so:
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package game;

import javax.swing.*;

/**
 *
 * @author Christian
 */
public class Game extends JApplet {
 
    /**
     * Initialisiert das Applet.
     */
    public void init() {
        // TODO code application logic here
        new Solitaire();
    }
}

Dein Applet öffnet dann deinen JFrame.
Wobei ich dann aber die Zeile 14 ändern würde in:
[JAVA=14]setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);[/code]
Sonst fliegt dir auch hier dein Code mit einer [JAPI]AccessControlException[/JAPI] um die Ohren, weil ein Applet die VM nicht beenden darf.

Wenn dein Applet nicht in einem Fenster, sondern direkt im Browser laufen soll, ersetzt du Zeile 20 mit:
[java=20]add(new SolitaireCanvas());[/code]

Es kommt aber auch darauf an, von welchem Typ dein Objekt SolitaireCanvas ist.
 
Ich danke dir für die antwort.
Ich hab das jetzt mal so geändert wie du es beschrieben hast, wenn ich dann mein Projekt ausführe, erhalte ich eine fehlermeldung:
Java:
java.lang.NoSuchMethodException: game.Game.main([Ljava.lang.String;)

Es kommt aber auch darauf an, von welchem Typ dein Objekt SolitaireCanvas ist.
Hier:
Java:
public class SolitaireCanvas extends JComponent.........................

Danke schonmal.

MfG
 
Jetzt hab ich das mal alles mit Eclipse erstellt und nun funktioniert alles.
Irgendwie blick ich bei NetBeans nicht durch, naja, jetzt funktioniert es wenigstens.

Danke trotzdem für die hilfen.

MfG
 

Neue Themen


Zurück
Oben