Avatar billede sbk200 Nybegynder
26. marts 2004 - 09:38 Der er 7 kommentarer og
1 løsning

Billede load fra Jar fil fejler

Hej Eksperter,
Jeg har en simpel applet hvor jeg anvende nogle jpg billeder på nogle JButtons. Alle class, jpg filer er pakket i én jar fil. Når jeg loader denne fra min Apache webserver vises billederne fint - hvergang. Men loades de fra en embedded webserver, som skal anvendes, vises billederne ikke altid. Er der nogen der har en ide til hvor jeg skal lede efter fejlen. Ligger problemet på server eller klient side !?
Avatar billede arne_v Ekspert
26. marts 2004 - 09:42 #1
Ikke altid lyder skummelt.

Forslag: prøv og download og gem jar filen fra begge web servere (wget eller
et lille Java program) og se om der er forskel på filerne eller deres
MIME content type.

Forskel kunne være noget binært versus text.
Avatar billede sbk200 Nybegynder
26. marts 2004 - 10:44 #2
Hej Arne,.. Er ikke lige så stiv i det her.. MIME content type .. hvad er det? Et lille jave program der henter filen. Har du evt. et eksempel ?
Avatar billede arne_v Ekspert
26. marts 2004 - 11:05 #3
content type er en HTTP header som serveren sender tilbage til browseren som
beskriver hvad filen idneholder (text/plain, text/html, image/gif etc.).

Jeg kan godt lave et lille eksempel.
Avatar billede sbk200 Nybegynder
26. marts 2004 - 11:34 #4
Det lyder super Arne!
Avatar billede arne_v Ekspert
26. marts 2004 - 22:01 #5
import java.net.*;
import java.io.*;

public class ArnesWebDownloadDebugger {
    public static void download(String fileurl, String filename) {
        try {
            URL url = new URL(fileurl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
            con.connect();
            int status = con.getResponseCode();
            if (status == HttpURLConnection.HTTP_OK) {
                InputStream is = con.getInputStream();
                System.out.println("Content-Type header = " + con.getContentType());
                System.out.println("Content Length Header = " + con.getContentLength());
                OutputStream os = new FileOutputStream(filename);
                byte[] b = new byte[1000];
                int total = 0;
                int n;
                while ((n = is.read(b)) >= 0) {
                    os.write(b, 0, n);
                    total += n;
                }
                os.close();
                is.close();
                System.out.println("Actual length = " + total);
            } else {
                System.out.println("HTTP status = " + status);
            }
            con.disconnect();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        download("http://www.vajhoej.dk/arne/eksperten/showversion/showversion.class", "C:\\slet.class");
    }
}
Avatar billede arne_v Ekspert
26. marts 2004 - 22:03 #6
Erstat URL og filnavn med det rigtige.

Den bør returnere:

Content-Type header = application/octet-stream
Content Length Header = xxxx
Actual length = xxxx

hvor xxxx skal være det samme for begge længder og det samme for begge servere.
Avatar billede sbk200 Nybegynder
02. april 2004 - 14:03 #7
Tak for koden arne. Nu har jeg noget at arbejde videre med. Kan du ikke lige smide et svar så for du velfortjente point.
Nå jeg har ud af hvorfejlen er skal jeg nok lige opdatere her !!
Avatar billede arne_v Ekspert
02. april 2004 - 14:31 #8
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester