# Bilder werden nicht geladen



## dn_cmp (7. Jun 2007)

hallo,

hab folgendes problem:
1. dieser java code funktioniert auf 1und1 webspace


```
Image img = getImage(getCodeBase(), "tn_img001.JPG");
```

2. auf meinem strato webspace funktioniert er nicht!

- das bild liegt im gleichen verzeichnis wie das applet
- unter 1. kann ich das bild beispielsweise auf ein label legen
- unter 2. wird das bild erst gar nicht geladen

außerdem hab ich folgendes ausprobiert:

Zeile 35> URL imageURL = getClass().getResource("tn_img001.JPG");
Zeile 36> System.out.println(imageURL);
Zeile 37> ImageIcon ico = new ImageIcon(imageURL);

was zu diesem fehlercode führt:
>null
>java.lang.NullPointerException
> at javax.swing.ImageIcon.<init>(Unknown Source)
> at Test.init(Test.java:37)
> at sun.applet.AppletPanel.run(Unknown Source)
> at java.lang.Thread.run(Unknown Source)

hat irgendjemand ne ahnung?

ach ja ... noch als ergänzung:
das das in zeile 37 eine NullPointerException ist die daran liegt, dass imageURL = null ist, ist schon klar

auch das hier klappt nicht (klappt ABER auf dem 1und webspace):

```
URL url = new URL("http","www.blabla.com", "/dev/img/tn_img001.JPG");

if (url == null) //die URL ist nicht! null!!
  {
    throw new RuntimeException("Error reading resource ");
  }
img = ImageIO.read(url);
```

Fehlermeldung:
java.security.AccessControlException: access denied (java.net.SocketPermission www.blabla.com:80 connect,resolve)
	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.checkConnect(Unknown Source)
	at sun.net.www.http.HttpClient.openServer(Unknown Source)
	at sun.net.www.http.HttpClient.<init>(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.http.HttpClient.New(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at java.net.URL.openStream(Unknown Source)
	at javax.imageio.ImageIO.read(Unknown Source)
	at Test.init(Test.java:51)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

danke.


----------



## Wildcard (7. Jun 2007)

Wenn dein Applet nicht signiert ist darf es sich nicht zu anderen Servern verbinden als der auf dem es liegt.


----------



## L-ectron-X (7. Jun 2007)

Applet signieren: :arrow: FAQ


----------



## Gast (11. Jun 2007)

Ich würde das gerne genauer erklährt haben.
Ich habe das selbe Problem (bei 

Image img = getImage(getCodeBase(), "hallo.JPG");

// werden keine Bilder angezeigt).

Meiner Meinung nach habe ich das Applet signiert ...


----------



## Gast (11. Jun 2007)

... eclipse gibt mir auch nur beim kompilieren Fehler aus ...

Axon


----------



## L-ectron-X (11. Jun 2007)

Gast hat gesagt.:
			
		

> Meiner Meinung nach habe ich das Applet signiert ...


Hast du denn ein Fenster mit einer Meldung beim Laden des Applets?

getCodeBase() zeigt auf den URL/Verzeichnis, in dem der Code des Applets liegt. Das heißt, zum Laden/Anzeigen der Bilder braucht das Applet nicht signiert werden.
Zeige mal den Code, dann werden wir schon was finden. Hast du mal in die Java-Console des Browsers gesehen, was die so ausgibt?



			
				Gast hat gesagt.:
			
		

> ... eclipse gibt mir auch nur beim kompilieren Fehler aus ...


Welche?


----------



## Axon (11. Jun 2007)

Danke für die schnelle Antwort.

Der Fehler bei Eclipse lautet:

Exception in thread "main" java.lang.NullPointerException
at java.applet.Applet.getCodeBase(Unknown Source)
at CanvasML.<init>(CanvasML.java:11)
at Fenster.<init>(Fenster.java:34)
at start.main(start.java:6)

Ich möchte in Eclipse ein Spiel programmieren ... und bisher ist das Raumschiff, welches man steuert halt nur ein rotes Rechteck ..., ich fände ein gezeichnetes Schiff einfach besser.

Ohne die oben genannte Zeile läuft alles ... nur mit ihr scheitert es eben schon am kompilieren

Axon


----------



## L-ectron-X (11. Jun 2007)

Und wo liegt das Bild relativ zum Applet? getCodeBase() zeigt auf das Verzeichnis, in dem das Applet liegt.
Das heißt, das Bild müsste in genau diesem Verzeichnis liegen.


----------



## Axon (11. Jun 2007)

das Bild liegt im workspace (von eclipse) im Ordner des betreffenden Projektes ...


----------



## Axon (11. Jun 2007)

hilft es, wenn ich einmal die gesammte Klasse schreibe?


----------



## L-ectron-X (11. Jun 2007)

Axon hat gesagt.:
			
		

> das Bild liegt im workspace (von eclipse) im Ordner des betreffenden Projektes ...


Im Verzeichnis vom Applet, oder wo ist das?



			
				Axon hat gesagt.:
			
		

> hilft es, wenn ich einmal die gesammte Klasse schreibe?


Möglicherweise. Lass mal sehen.


----------



## Axon (11. Jun 2007)

```
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.*;
import java.applet.*;
import java.net.URL;

public class CanvasML extends Applet{
	public int x,y;
	int a=anithred.a;
//public Image img;
URL Base;

	public int okasten [][] = new int[a][8]; //a kaesten haben die werte: x-pos(400-800); y-pos(0); breite(10-20), hoehe ; schrittweite; Farbe1, farbe2, farbe3 

	public CanvasML(){
	    super();
	    setSize(800,400);
	    setBackground (new Color(0,0,0));
	    setVisible(true);
	   
//	Base = getCodeBase();
//	 img = getImage(Base,"draw/hallo.gif");
	}


	public void paint (Graphics g){
	g.setColor (new Color(255,0,0));
	g.fillRect(x,y,20,20);
//g.drawImage(img,20,20,this);
	g.setColor (new Color(0,255,0));
	if (Fenster.life < 600)
	{g.setColor (new Color(100,255,0));}
	if (Fenster.life < 400)
	{g.setColor (new Color(255,255,0));}
	if (Fenster.life < 200)
	{g.setColor (new Color(255,100,0));}
	if (Fenster.life < 100)
	{g.setColor (new Color(255,0,0));}
	g.fillRect(5,400,Fenster.life,20);

	for (int i=0; i<a; i++)
	    {
	    g.setColor(new Color(okasten[i][5],okasten[i][6],okasten[i][7]));
	g.fillRect(okasten[i][0],okasten[i][1],okasten[i][2],okasten[i][3]); 
	}

	}

	public static void main(String[] args) {
	}
}
```

*Wildcard - Code Tags eingefügt*


----------



## Axon (11. Jun 2007)

jetzt ist es natürlich kommentar, weil ich das programm habe vorhin laufen lassen ...
ansonsten, weiß ich nicht ... kann es sein, dass getCodeBase() aus irgendeinem Grund Probleme mit WindowsVista (ich schähme mich auch dafür ... am netz hänge ich dafür mit ubuntu ... aber meine eltern wollen mir nicht erlauben am neuen rechner mit meinem Linuxzeugs rum zu fuschen ...) gibt ... ?


----------



## Axon (11. Jun 2007)

ich hoffe doch, dass der Workspace bei Eclipse DAS Verzeeichnis des Applets ist ... 
C:/Users/Esther/Desktop/Müll/eclipse/workspace/spiel/draw/hallo.gif
liegt das Bild
und die klassen vom  projekt liegen in
C:/Users/Esther/Desktop/Müll/eclipse/workspace/spiel

hilft das?


----------



## Guest (11. Jun 2007)

Ich hatte ein gleiches Problem bis ich dieses Coding verwendet hatte:


```
try {
        	pbPad9.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot9.png")));
        	pbPad8.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot8.png")));
        	pbPad7.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot7.png")));
        	pbPad6.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot6.png")));
        	pbPad5.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot5.png")));
        	pbPad4.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot4.png")));
        	pbPad3.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot3.png")));
        	pbPad2.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot2.png")));
        	pbPad1.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot1.png")));
        	pbPad0.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slot0.png")));
        	//pbPadEntf.setIcon(new ImageIcon(new URL(getCodeBase(), "http://www.java-rpg.de/images/slotentf.png")));
        	pbPadEntf.setIcon(new ImageIcon(new URL(getCodeBase(), "images/slotentfhand.png")));
        } catch (MalformedURLException e) {
        	e.printStackTrace();
        }
```

Bis dahin war es nur moeglich die Grafiken im laufenden Internetbetrieb zu sehen, bei einem lokalen Start des Applets wurden keine Grafiken geladen. Ich musste daher noch die java.policy-Datei nach /home/username (c:/windows) kopieren. Als dann funktionierten die Appletgrafiken sowohl im I-Net als auch beim lokalen Starten. Allerdings funktioniert dies derzeit nicht mit WAV-Datein, diese sind erst in der finalen I-Netversion zu hören.[/code]


----------



## L-ectron-X (11. Jun 2007)

@Axon: Probiere mal

```
try {
   image = getImage(new URL(getCodeBase()+"draw/hallo.jpg"));
}
catch(MalformedURLException e) {
    e.printStackTrace();
}
```

Und: Ein Applet kennt keine main()-Methode. Du musst mindestens die init()-Methode überschreiben.


----------



## Axon (12. Jun 2007)

Guten Morgen!

Ich verstehe das nicht ganz genau ... wie würde obiger Quelltext in meinen Quelltext eingebetet werden ... ?


----------



## Axon (12. Jun 2007)

Entschuldigung ...  ich hatte die zweite seite übersehen ...
ich probiers mal und melde mich dann ...


----------



## Axon (12. Jun 2007)

Danke ... jetzt habe ich zwar keinen error ... aber auch kein bild ... gibt es da noch irgendetwas was ich probieren könnte ?


----------



## Axon (12. Jun 2007)

Ich widerrufe alles:
- ich habe vorhin kein Bild bekommen, weil  ich 
//image = getImage(new URL(getCodeBase()+"draw/hallo.jpg")); 
als kommentar da stehen hatte.
- nun bekomme ich aber auch mit dem :
try {
   image = getImage(new URL(getCodeBase()+"draw/hallo.jpg"));
}
catch(MalformedURLException e) {
    e.printStackTrace();
}
den selben Fehler wie vorhin ...


----------



## Gast (12. Jun 2007)

Mein Quelltext lautet:


```
import java.applet.Applet;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.*;
import java.applet.*;
import java.net.URL;

public class CanvasML extends Applet{
   public int x,y;
   int a=anithred.a;
public Image img;
URL Base;

   public int okasten [][] = new int[a][8]; //a kaesten haben die werte: x-pos(400-800); y-pos(0); breite(10-20), hoehe ; schrittweite; Farbe1, farbe2, farbe3

   public CanvasML(){
       super();
       setSize(800,400);
       setBackground (new Color(0,0,0));
       setVisible(true);

try {
   img = getImage(new URL(getCodeBase()+"draw/hallo.jpg"));
}
catch(MalformedURLException e) {
    e.printStackTrace();
}
   }


   public void paint (Graphics g){
   g.setColor (new Color(255,0,0));
   g.fillRect(x,y,20,20);
//g.drawImage(img,20,20,this);
   g.setColor (new Color(0,255,0));
   if (Fenster.life < 600)
   {g.setColor (new Color(100,255,0));}
   if (Fenster.life < 400)
   {g.setColor (new Color(255,255,0));}
   if (Fenster.life < 200)
   {g.setColor (new Color(255,100,0));}
   if (Fenster.life < 100)
   {g.setColor (new Color(255,0,0));}
   g.fillRect(5,400,Fenster.life,20);

   for (int i=0; i<a; i++)
       {
       g.setColor(new Color(okasten[i][5],okasten[i][6],okasten[i][7]));
   g.fillRect(okasten[i][0],okasten[i][1],okasten[i][2],okasten[i][3]);
   }

   }

   public static void main(String[] args) {
   }
}
```


----------



## L-ectron-X (12. Jun 2007)

Die NullPointerException bekommst du, weil Bilder nicht im Konstruktor eines Applets geladen werden, sondern in der init()-Methode. Daher sollte dein Code (hier mal aufs Wesentliche reduziert) etwa so aussehen:

```
import java.awt.*;
import java.applet.*; 
import java.net.*;

public class CanvasML extends Applet{ 
   private Image img;

   public void init() {
      setBackground(Color.BLACK);

      try {
         img = getImage(new URL(getCodeBase()+"draw/hallo.jpg"));
      }
      catch(MalformedURLException e) {
          e.printStackTrace();
      }
   }

   public void paint (Graphics g){ 
      g.drawImage(img,20,20,this);

   }
}
```

Und ich hatte oben gesagt, dass ein Applet keine main()-Methode kennt. Raus damit!


----------

