# Inputstream -> Bilder



## Kingkook (23. Mai 2011)

Liebe Com,

ich hole mir momentan per Inputstream einen Pfad von einem Server.Dieser führt zu einem Bild,welches ich anzeigen lassen möchte.Wie kann ich OHNE die IOUtils-Bibliothek einzubinden mit "hauseigenen" Mitteln aus diesem Inputstream einen String erhalten ( bzw. das Bild auf eine andere weise ergattern )

Liebe Grüße Kooki


----------



## Der Müde Joe (23. Mai 2011)

ImageIO (Java Platform SE 6)

Kapier grad nicht was du mit InputStream und String ergattern meinst.

readLine oder was?


----------



## Kingkook (23. Mai 2011)

Naja also wie gesagt es existiert ein Inputstram.Dieser liest per


```
Inputstream xx = new URL("URL").openStream();
```

Die benutze URL liefert ( z.B. ) bei Eingabe in den Browser nur den Pfad zu einem Bild auf einem Server zurück.Diesen Pfad will ich benutzen um ein BufferedImage zu erhalten.Momentan nutze ich den InputStram xx indem ich später versuche per:

```
BufferedImage image = ImageIO.read(xx);
```

das Bild zu laden.Danach soll das Bild zerteilt werden :

```
pic[x][y] = source.getSubimage(x*source.getWidth()/horizontal,y*source.getHeight()/vertical,source.getWidth()/horizontal, source.getHeight()/vertical);
```

Dabei erhalte ich immer NullPointerExceptios.Bin mir nicht sicher,ob das Bild mit dieser Methode richtig geladen wird.Darum wollte ich evtl. versuchen an den String ( also den "übersetzten" Pfad zum Bild ) zu kommen.


----------



## VfL_Freak (23. Mai 2011)

Moin,



Kingkook hat gesagt.:


> Dabei erhalte ich immer NullPointerExceptios.


Aha ... wo denn genau ???:L???:L



Kingkook hat gesagt.:


> Bin mir nicht sicher,ob das Bild mit dieser Methode richtig geladen wird.


Wenn Du einen korrekten InputStream hast, sollte das IMHO gehen - oder ist genau DER null ?

Gruß
Klaus


----------



## Kingkook (23. Mai 2011)

Die NullPointer erhalte ich immer im dritten Codebeispiel.Kann nur leider nicht debuggen, da dass Applet online läuft.Daher weiß ich nicht genau welcher Wert Null ist.

EDIT: Es scheint als wäre das BufferedImage aus dem zweitem Codebeispiel null


----------



## VfL_Freak (23. Mai 2011)

Moin,

das ist schlecht ..... 
Versuch ggf. mal, über _System.out_... dran zukommen!

Was genau ist denn dort "*source*" ???:L

Gruß
Klaus


----------



## Kingkook (23. Mai 2011)

Wie im EDIT geschrieben.sysout sagt, dass BufferedImage ist null, welches eigentlich per ImageIO.read(); gelesen werden sollte.Gibt es noch eine bessere möglichkeit?


----------



## VfL_Freak (23. Mai 2011)

Moin,



Kingkook hat gesagt.:


> ```
> Inputstream xx = new URL("URL").openStream();
> ```


na, dann liegt doch die Vermutung nahe, dass hier schon Dein Inputstream NULL ist, oder ???:L
Ich hoffe mal, dass Du dort nicht wirklich "URL" übergibst, sondern schon eine *gültige* Adresse, oder ? 
Kannst Du denn im Browser darauf zugreifen ?
Macht vielleicht bei Euch ein Proxy Probleme ?

Gruß
Klaus


----------



## Kingkook (23. Mai 2011)

Zugriff über den Browser klappt perfekt.An einem Proxy liegt es meineswissens auch nicht.habe hier mal den Stack Trace:

```
java.lang.NullPointerException
null  -> das ist das BufferedImage
sun.net.www.protocol.http.HttpURLConnection$HttpInputStream@1d7fc31 -> das der inputStream
java.lang.reflect.InvocationTargetException
	at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager.runOnEDT(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.lang.NullPointerException
	at game.Main.<init>(Main.java:9)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.lang.reflect.Constructor.newInstance(Unknown Source)
	at java.lang.Class.newInstance0(Unknown Source)
	at java.lang.Class.newInstance(Unknown Source)
	at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
	at java.awt.event.InvocationEvent.dispatch(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
Ausnahme: java.lang.reflect.InvocationTargetException
```


----------



## VfL_Freak (23. Mai 2011)

wie bereits gesagt, wenn Dein "image" null ist, kann es nur an einer dieser beiden Zeilen liegen :

```
Inputstream xx = new URL("URL").openStream();
BufferedImage image = ImageIO.read(xx);
```
es sei denn, es gibt noch mehr relevanten Code, den Du nicht zeigst ...
Fängst Du denn dort ggf. Exceptions ab ?? 
sieh API:


> read
> 
> public static BufferedImage read(ImageInputStream stream)
> throws IOException
> ...



Gruß
Klaus


----------



## Kingkook (23. Mai 2011)

Nein, das ist alles des relevanten Codes.
Am Stream wird es wohl nicht liegen, habe ja im Stacktrace ( siehe Oben ) ein System.out angezeigt, in dem der InputStream ausgegeben wird. Es muss an der .read() Zeile liegen.
IllegalArgumentException& IOException werden abgefangen und liefern nichts.

Gibt es noch einen Weg an das Bil zu kommen,ausser meiner Methode?


----------



## VfL_Freak (23. Mai 2011)

was ist denn dies im Stacktrace:


> Caused by: java.lang.NullPointerException
> at game.Main.<init>(Main.java:9)



Du könntest es vlt. auch mal so versuchen :

```
Image myImage = Toolkit.getDefaultToolkit().getImage( theURL ); // theURL ist vom Typ URL
```

Gruß
Klaus


----------



## Kingkook (23. Mai 2011)

Dort wird das Bild, welches ich zu laden Versuche eingelesen und benutzt daher die NullPointer.

und wie bekomme ich denn aus dem Image ein BufferedImage?


----------



## VfL_Freak (23. Mai 2011)

Kingkook hat gesagt.:


> Dort wird das Bild, welches ich zu laden Versuche eingelesen und benutzt daher die NullPointer.


???:L

Welche Lib nutzt denn überhaupt?
java.io oder javax.imageio?


----------



## Kingkook (23. Mai 2011)

Ich benutze javax.imageio.




> Dort wird das Bild, welches ich zu laden Versuche eingelesen und benutzt daher die NullPointer.



Das Bild was ich die ganze Zeit versuche zu laden wird in ein BufferedImage[][] in kleinen Teilbildern gespeichert.Dieses Array benutze ich dann später, um gewisse Teile des Array in einem Konstruktor zu benutzen.Von dort kommt die NullPointer nach der du gefragt hast.


----------



## Gast2 (23. Mai 2011)

Zeig doch bitte mal ein bischen mehr Code. Am besten den zusammenhängenden Teil ein einem Stück.


----------



## Kingkook (23. Mai 2011)

Hier hole ich mir die Daten:


```
private void getWebInformations()
        {
            try
                {

                            base_url = "Internetseite";

                    key = "key";
                    secret = "secret";
                    httprequest = ""+base_url+"/interface/adimages/start?key="+key+"&secret="+secret+"" ;
                    InputStream webresponse = new URL(httprequest).openStream();
                    try
                    {
                    picStream = new URL(""+base_url+"/interface/adimages/get?oauth_token="+webresponse+"&images=1&layout=s").openStream();
                    URL test = new URL(""+base_url+"/interface/adimages/get?oauth_token="+webresponse+"&images=1&layout=s");
                    }
                    catch (IllegalArgumentException ee)
                    {
                        System.out.println(ee);
                    }




                }
            catch(IOException ioe)
                {
                    System.out.println(ioe);
                }
        }
```

Hier wird das Bild geladen:


```
public BufferedImage[][] loadPics(String path,int horizontal,int vertical)
        {
            URL pic_url = null;
            BufferedImage[][] anim = new BufferedImage[horizontal][vertical];
            BufferedImage source = null;

            try
                {
                        source = ImageIO.read(picStream);
  
                }
            catch (IOException e)
                {
                    System.out.println("Fail by load");
                }

            for(int x=0;x<horizontal;x++)
                {
                    for(int y=0;y<vertical;y++)
                        {
                            try
                                {
                                       anim[x][y] = source.getSubimage(x*source.getWidth()/horizontal,y*source.getHeight()/vertical,source.getWidth()/horizontal, source.getHeight()/vertical);

                                }
                            catch (NullPointerException e)
                                {
                                    System.out.println("Pic_url = "+pic_url);
                                    System.out.println("Source = "+source);
                                    String s = ""+picStream;
                                    System.out.println("PicStream = "+s);

                                    return anim;


                                }
                        }
                }
            return anim;
        }
```


----------



## VfL_Freak (23. Mai 2011)

Moin,

hmm, was mir so auf die Schnelle auffällt :

(a) woher kennt die Methode "loadPics" den "picStream" ???:L 
     ist vermutlich deswegen NULL, oder ?
(b) wo wird "loadPics" denn überhaupt aufgerufen ???:L

Gruß
Klaus


----------



## Sonecc (23. Mai 2011)

VfL_Freak hat gesagt.:


> (a) woher kennt die Methode "loadPics" den "picStream" ???:L


Grob geraten: picStream ist ein Feld innerhalb der Klasse ...


----------



## Kingkook (23. Mai 2011)

Sonecc hat gesagt.:


> Grob geraten: picStream ist ein Feld innerhalb der Klasse ...



So ist es, picStream wird in getWebInformations() initialisiert.
loadPics wird hier aufgerufen:


```
puzzle = loadPics(name,difficult,difficult);
```

Der String name ist hierbei inzwischen unwichtig, der war aus einer alten Version.
puzzle ist ein BufferedImage[][] welches der Klasse bekannt ist und wird später benutzt:


```
PuzzlePic piece = new PuzzlePic(puzzle[Integer.parseInt(""+randomLoader[counter-1].charAt(0))][Integer.parseInt(""+randomLoader[counter-1].charAt(2))], (double)(j*200), (double)(i*200), this, counter, Integer.parseInt(""+randomLoader[counter-1].charAt(4)));
                                pieces.add(piece);
```


----------



## VfL_Freak (23. Mai 2011)

Moin,



Kingkook hat gesagt.:


> So ist es, picStream wird in getWebInformations() initialisiert.



tja, das scheint ja genau das nicht zu funktionieren, oder ???:L

Gruß
Klaus


----------



## Sonecc (23. Mai 2011)

Du bist heute nicht ganz auf der Höhe oder?
Der TO fragt doch in diesem Thread warum der Stream null ist...


----------



## VfL_Freak (23. Mai 2011)

Moin,



Sonecc hat gesagt.:


> Du bist heute nicht ganz auf der Höhe oder?
> Der TO fragt doch in diesem Thread warum der Stream null ist...


Das mag wohl so sein .... :bahnhof:

Aber wenn Du das aus den Codeschnipseln erkennen kannst, dann sag' du es ihm doch einfach 
IMHO ist das so nicht erkennbar .....

Gruß
Klaus


----------



## Sonecc (24. Mai 2011)

Also das Problem erkennen sollte nicht so schwierig sein. Er hat mehrfach danach gefragt und der Code, den er gepostet hat, ist relativ eindeutig
Wo der fehler liegt wurde ihm auch schon gesagt (in der Regel nunmal falscher Pfad)


----------

