Bitmaps in Java Applets

Sieben

Vice Admiral Special
Mitglied seit
02.06.2002
Beiträge
656
Renomée
1
Standort
Deutschland -> Thüringen
Huhu,


kennt sich wer mit Java Applets aus?! Ich versuche grad das mein Java Applet eine *bmp datei als Hintergrund läd...

Dazu deklariere ich eine
Image img;
die dann per
img = getToolkit().getImage("grau.GIF");
mein Bild laden sollte und als Hintergrund ausgibt mit
g.drawImage(img,10,20,this);

soweit so gut! Als eigenständige Java Applikation funktioniert das auch genauso wie ich das haben will... das ganze funktioniert auch wenn ich von Eclipse das ganze als Java Applet starte... wenn ich das ganze allerdings in html einbinde und mit Mozilla bzw IE starte läd er das Bild einfach nich *grml kann mir jemand erklären warum er das nicht tut?? Sollte ich da noch irgendwas beachten?? Browsertechnisch?? Ich mein Standalone funzt es doch auch
*noahnung*

Meine Paint Methode:

public void paint (Graphics g)
{
Image img;
img = getToolkit().getImage("grau.GIF");
g.drawImage(img,10,20,this);

g.drawString(this.nick,50,230);
g.drawString(this.nick2,150,230);
}

kennt sich da wer aus??


gruß! Sieben!
 
Huhu,


erstmal danke für den Tipp! Also das mit dem Media Tracker funzt auch nid so richtig... das komische is nur das wenn man den Source Code mit Eclipse als Applet laufen lässt er das Bild ohne Probleme anzeigt nur halt im Browser nid *noahnung* 8-(

Hab grad mal im IE den Menü-Punkt Extras -> Java Konsole entdeckt, das teiul geöffnet und er hat mir folgende warnmeldung rausgegeben...:

java.security.AccessControlException: access denied (java.io.FilePermission grau.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 Test.init(Test.java:8)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


hm also mein Bild liegt Lokal aufn Rechner macht er deswegen die Mucken?? Hier mal mein Test-Quelltext:

import java.applet.*;
import java.awt.*;

public class Test extends Applet
{
Image img;
public void init()
{
img = getToolkit().getImage("grau.GIF");
MediaTracker mt = new MediaTracker(this);
mt.addImage(img, 0);
try
{
mt.waitForAll();
}
catch (InterruptedException e)
{

}
repaint();
}
public void paint(Graphics g)
{
if (img != null)
{
g.drawImage(img,10,20,this);
}
}
}

gruß! Sieben!
 
Ah ok, dann ist es klar.

Das Problem ist die Java Sandbox in der die Applets laufen.

Die verhindert, dass Ressourcen (z.B. Bilder) über eine andere URL geladen werden als das Applet selbst (außer das Applet ist signiert, mit Zertifakt usw.).
Sonst könnten Applets sich von jedem x-beliebigen Server ihre Daten ziehen.

Könntest aber testweise einen WebServer benutzen (z.B. Apache) und das Applet zusammen mit dem Bild über den WebServer laden. Dann wird das Bild über die gleiche URL geladen wie das Applet selbst.
Kannst natürlich auch Tomcat als WebServer nehmen. Kannste gleich noch JSP lernen :).
 
halt ich seh grad du lädst das einfach nur mit "grau.gif". Da findet das Applet das Bild nicht.
Musst einen kompletten Pfad angeben. Also entweder eine Internet URL (http://...) oder eine Lokation auf der Platte (file://) (aber dann gehts im Web nicht mehr)
 
Huhu,


erstmal danke Peter für deine Hilfe! Das mit der Java Sandbox hab ich auch schon mal gelesen... hm trotzdem klappt das nich so wie's soll... mein Source-Code wo er das Bild laden will sieht so aus:

{
img = applet.getImage(new URL("http://home.arcor.de/siebn/TicTacToe/"), "grau.jpg");
}

daraufhin spuckt er mir nen NullPointerException aus :o :o

java.lang.NullPointerException
at java.applet.Applet.getAppletContext(Unknown Source)
at java.applet.Applet.getImage(Unknown Source)
at Spiel_applett.init(Spiel_applett.java:21)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


was für mich heißt das er das Bild an der angegebenen URL net findet obwohl es genau da liegt 8-( 8-( kann es vielleicht sein das Arcor intern das Applet woanders liegen hat und er es deshalb nicht findet??

**** Edit ****

auch mit diesen:

img = applet.getImage(getCodeBase(), "grau.jpg");

macht ers nich obwohl laut

System.out.println(getCodeBase() +"grau.jpg");

Konsole: file:/C:/eclipse/workspace/TicTacToe/grau.jpg

genau der Pfad der Datei rauskommt... 8-( 8-( entweder is meine Grau Datei im Arsch oder Java verarscht mich *noahnung*
gruß! Sieben!
 
Zuletzt bearbeitet:
Also Arcor legt die Applets nicht einfach wo anders ab. Alles wird von da geladen, wo man es hin kopiert.

Aber Applets sind nie so ganz einfach. Liegt schon allein daran, dass der IE eine uralte Java VM (ich glaub Stand Java 1.1) hat, wenn man nicht die SUN VM installiert.
Außerdem hat er auch etwas Probleme die Applets aus Jar Files zu laden (der nimmt normalerweise CAB Files).

Ich hab mal deine Seiten aufgerufen, aber bekomme diverse Fehlermeldungen (ClassCastException usw.).

Aber der Code, den du hier oben geschrieben hast sollte eigentlich funzen.
Kannst ja mal mit System.err.println() die CodeBase in der JavaConsole des Browsers ausgeben lassen.
Vielleicht hat er Probleme die CodeBase zu bestimmen.

Wenn ich dir noch irgendwie helfen kann meld dich.

P.S.: ich hasse Applets und alles was mit JAVA Oberflächen zu tun hat (Swing,AWT usw.). Der Code sieht dabei immer total unsauber aus, da man oft nicht den Code für die GUI vom Rest trennen kann. Deswegen bin ich da auch keine so große Hilfe.
Was ich hingegen recht gerne mache ist JSP/Servlet Programmierung in Verbindung mit JavaScript. Wenn du zu sowas Fragen hast kann ich dir bestimmt besser weiterhelfen ;).
 
Zuletzt bearbeitet:
Huhu,


also ich hab das jetzt erstmal mit dem Bitmap gelassen... werde aber noch weiter rumprobieren... will auch irgendwie noch ne Statistik reinbekommen...
Trotzdem danke für die hilfe!

TicTacToe falls du dirs mal anschauen willst...

hm Servlets/JSP is das sowas wie Netzwerk Programmierung?! Also das ein Programm mit dem anderen über Lan oder Internet Datenaustauscht?! Sowas hab ich nämlich auch für mein Proggie geplant... muss aber mal schauenob das überhaupt zu realisieren is...

gruß! Sieben!
 
Nicht ganz.
PHP kennst Du?
Sowas ähnliches sind Servlets.
Also quasi serverseitige Programme, die dynamisch HTML(oder WML, XML) erzeugen und dabei
z.B. auf Daten aus einer Datenbank holen.

JSPs sind eigentlich nur eine Vereinfachung von Servlets und werden eigentlich so wie PHP Seiten geschrieben. Also HTML Code, in dem direkt auch Java eingebettet werden kann.
Beim ersten Ausführen werden diese JSP Seiten aber wieder automatisch zu Servlets kompiliert.


Das was Du mit der Netzwerk Programmierung meinst ist mehr RMI (Remote Method Invocation - Info z.B. hier ). Desweiteren gibts da noch z.B.

Jini, was speziell für Netzwerk Anwendungen gedacht ist. Aber für den Anfang tuts wohl auch ein einfacher RMI Service mit einem Client.
Wenn es aber übers Internet gehen soll, funktioniert RMI nicht so ohne weiteres bzw. man sollte auf etwas zurückgreifen, das HTTP als Protokoll verwendet.

Das kann man dann z.B. doch mit Servelts machen oder mit WebServices.

Zu dem Thema kann man aber Stunden erzählen. Da gibts 1000 Möglichkeiten. Wenn Du genau weißt, was Du machen willst können wir ja nen guten Lösungsweg suchen.
 
Zuletzt bearbeitet:
Ach bei deinem TicTacToe hab ich den ersten Bug gefunden :).
Er fragt zweimal nach dem Namen von Spieler 1. - Ich denk Du musst nur den Text von dem Label ändern.
Weil im Spiel passt es dann.

EDIT: ok sind noch ein paar Bugs mehr drin. Ich bekomm immer den Namen von Spieler 1 als Gewinner, wenn ich gegen den Computer spiele.

Aber sonst für den Anfang garnet schlecht. Mein erstes Applet war nur eine kleine Animation.
War damals eine Praktikumsaufgabe an der Uni.

War grad auch auf eurer HP. Ihr habt ein Cheaterlog? Is ja fies ;)
 
Zuletzt bearbeitet:
Zurück
Oben Unten