Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    3

    [JAVA] socket refresh image

    il codice seguente mi esegue il caricamento di un'immagine sul display del cellulare, vorrei che tale immaggine sia caricata ripetutamente,in quanto in realtà l'immagne photo.jpg varia nel tempo, ho provato ad inserire un while infinito nel metodo run ma non funziona. qualcuno ha qualche idea???

    codice:
    package client.mobile;
    
    import java.io.DataInputStream;
    import javax.microedition.io.*;
    import javax.microedition.lcdui.*;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.io.IOException;
    import javax.microedition.lcdui.game.Sprite;
    
    public class Client implements Runnable, CommandListener {    
        private SocketMIDlet parent;
        private Display display;
        private Form f;
        private StringItem si;
        private TextField tf;
        private boolean stop;    
        private Command sendCommand = new Command("Send", Command.ITEM, 1);
        InputStream is;
        Sender sender;
        
        public Client(SocketMIDlet m) {
            parent = m;
            display = Display.getDisplay(parent);
            f = new Form("Picture");
            display.setCurrent(f);
        }
        
        /**
         * Avvio del thread client
         */
        public void start() {
            Thread t = new Thread(this);
            t.start();
        }
        
        
        public void commandAction(Command c, Displayable s) {
            if (c == sendCommand && !parent.isPaused()) {
                sender.send(tf.getString());
            }
            if (c == Alert.DISMISS_COMMAND) {
                parent.notifyDestroyed();
                parent.destroyApp(true);
            }
            
        }
        
        /**
         * Chiusura di tutti gli streams aperti
         */
        public void stop() {
            try {
                stop = true;
                sender.stop();
                if (is != null) {
                    is.close();
                }
            } catch (Exception ioe) {
               System.out.println("Err3");
               ioe.printStackTrace();
            }
        }
        
        public void run(){
                try {
                    getViaHttpConnection("http://localhost:88/photo.jpg");
                } catch (IOException ex) {
                    System.out.println("Err4");
                    ex.printStackTrace();
                }
        }
        
        /**
         * Connessione e caricamento immaggine sul dispaly
         */
        void getViaHttpConnection(String url) throws IOException {
            HttpConnection c = null;
            InputStream is = null;
            int rc;
            Image img = null;
            try {
                c = (HttpConnection)Connector.open(url);
                rc = c.getResponseCode();
                if (rc != HttpConnection.HTTP_OK) {
                    throw new IOException("HTTP response code: " + rc);
                }
                is = c.openInputStream();
                String type = c.getType();
                int len = (int)c.getLength();
                System.out.println(len);
                if (len > 0) {
                    int actual = 0;
                    int bytesread = 0 ;
                    byte[] data = new byte[len];
                    while ((bytesread != len) && (actual != -1)) {
                        actual = is.read(data, bytesread, len - bytesread);
                        bytesread += actual;
                    }
                    img = Image.createImage(data, 0, len);
                    img = resizeImage(img);
                    f.append(img);
                }
            } catch (ClassCastException e) {
                throw new IllegalArgumentException("Not an HTTP URL");
            } finally {
                if (is != null)
                    is.close();
                if (c != null)
                    c.close();
            }
        }

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    vuoi intendere che per qualche motivo l'immagine sul server cambia ma viene mantenuto il suo nome? Se sì, puoi "ingannare" il meccanismo di cache del browser (o del cellulare) alla solita maniera, ossia aggiungendo un

    ?qualocsa_di_variabile

    al nome del file. Questo non dovrebbe impedirne il caricamento ma ingannerebbe il dispositivo facendogli credere di avere a che fare con qualcosa di nuovo. Normalmente ci si "appende" il tempo in millisecondi, per cui - al limite da tradurre per javame che non conosco -

    codice:
    try {
                    getViaHttpConnection("http://localhost:88/photo.jpg");
                }
    Potrebbe diventare
    codice:
    try {
                    getViaHttpConnection("http://localhost:88/photo.jpg?"+System.currentTimeMillis());
                }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    3
    Andrea ho provato con il tuo consiglio ma non funziona. il problema rimane, l'immagine caricata sul cellulare rimane la stessa, mentre quella sul server cambia ogni 5 secondi.

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    3
    comunque ho risolto il problema, bastava invocare il garbage collector con System.gc() in quanto tutte le immaggini che venivano create andavano a riempire la memoria heap.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.