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

    Funzionamento multipiattaforma

    Salve a tutti,

    ho creato una semplice applet che apre un'immagine all'interno della
    macchina dell'utente.
    Per verificarlo ho usato questa guida http://www.developer.com/java/data/article.php/3303561
    però l'applet sotto Linux funziona ma non sotto Windows ne Mac. In
    particolare sotto Windows il problema è che l'ascoltatore del
    FileDialog non intercetta gli eventi. Qualcuno sa dirmi il perché?

    Grazie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    La sfera di cristallo la fornisci tu? O preferisci fornire il codice della tua applet?


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    10
    Originariamente inviato da LeleFT
    La sfera di cristallo la fornisci tu? O preferisci fornire il codice della tua applet?


    Ciao.
    Eccolo qui:

    codice:
    import java.awt.*;
    import java.applet.*;
    import java.awt.event.*;
    import java.net.*;
    
    public class Main extends Applet implements ActionListener{
            public Frame f;
            public FileDialog fd;
            public TextField path;
            Image img;
            CanvasImmagine bottom = new CanvasImmagine();
            public void init(){
                f = new Frame("Test");
                f.setSize(300, 300);
                f.setLayout(new BorderLayout());
                path = new TextField(30);
                path.setText("ciao");
                Button browse = new Button("Sfoglia");
                browse.addActionListener(this);
                Panel p = new Panel();
                p.add(path);
                p.add(browse);
                fd = new FileDialog(f);
                fd.addWindowListener(new AscoltatoreBrowse(this));
                f.add(p, BorderLayout.NORTH);
                f.add(bottom, BorderLayout.CENTER);
                f.setVisible(true);
            }
            public void changeImg(String dir, String file){
                try{
                    System.out.println("file://"+dir+file);
                    img = getImage(new URL("file://"+dir+file), file);
                    bottom.setImage(img);
                }
                catch(MalformedURLException e){System.out.println("Errore
    url");}
            }
    
            public void actionPerformed(ActionEvent e){
                    fd.setVisible(true);
            }
    
    }
    
    import java.awt.event.*;
    
    public class AscoltatoreBrowse implements WindowListener{
        Main m;
        public AscoltatoreBrowse(Main m){
            System.out.println("Ciao");
            this.m = m;
        }
    
        public void windowOpened(WindowEvent arg0) {}
        public void windowClosing(WindowEvent arg0) {
            System.out.println("Closing");
        }
        public void windowClosed(WindowEvent arg0) {
            System.out.println("Closed");
        }
        public void windowIconified(WindowEvent arg0) {
                    System.out.println("Iconified");
            }
        public void windowDeiconified(WindowEvent arg0) {
                    System.out.println("Deiconified");
            }
        public void windowActivated(WindowEvent arg0) {
                    System.out.println("Activated");
            }
        public void windowDeactivated(WindowEvent arg0) {
            m.path.setText(m.fd.getDirectory()+m.fd.getFile());
            System.out.println("Ciao");
            m.changeImg(m.fd.getDirectory(), m.fd.getFile());
        }
    
    }
    
    import java.awt.*;
    
    public class CanvasImmagine extends Canvas{
        Image img;
        public void setImage(Image img){
            this.img = img;
        }
        public void paint(Graphics g){
            g.drawImage(img, 0, 0, this);
        } 
    }

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Gpx
    Eccolo qui:
    Alcune cose:

    a) FileDialog è una dialog "modale". Vuol dire che quando fai setVisible(true) esce da questo metodo solo quando la dialog è chiusa. Quindi basta prendere il nome del file selezionato appena dopo il setVisible .... non fare tutto il "giro" strano e inutile col WindowListener!!

    b) Usare il protocollo file:// solo per accedere al file system mi sembra inutile. Oltretutto il formato della specifica è particolare e come hai composto l'URL credo (ma dovrei verificare) che non sia proprio corretto (o almeno non è "indipendente" dalla piattaforma).
    E in ogni caso per accedere al file-system locale (in qualunque modo) ci vogliono comunque dei permessi all'interno di una applet.

    c) CanvasImmagine, anche se minimale, potrebbe anche andare bene. Solo una cosa: nel setImage() devi chiedere il repaint() .... solo cambiare la variabile di istanza 'img' non è certo quello che causa il display automatico della immagine!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2007
    Messaggi
    10
    Ho modificato il codice in questo modo:

    codice:
    import java.awt.*;
    import java.applet.*;
    import java.awt.event.*;
    import java.net.*;
    
    public class Main extends Applet implements ActionListener{
            public Frame f;
    	public TextField path;
    	Image img;
    	CanvasImmagine bottom = new CanvasImmagine();
    	public void init(){
                f = new Frame("Test");
                f.setSize(300, 300);
                f.setLayout(new BorderLayout());
                path = new TextField(30);
                path.setText("ciao");
                Button browse = new Button("Sfoglia");
                browse.addActionListener(this);
                Panel p = new Panel();
                p.add(path);
                p.add(browse);
                f.add(p, BorderLayout.NORTH);
                f.add(bottom, BorderLayout.CENTER);
                f.setVisible(true);
            }
            public void changeImg(String dir, String file){
                try{
                    System.out.println("file://"+dir+file);
                    img = getImage(new URL("file://"+dir), file);
                    bottom.setImage(img);
                }
                catch(MalformedURLException e){e.printStackTrace();}
            }
    
    	public void actionPerformed(ActionEvent e){
                FileDialog fd = new FileDialog(f);
                fd.setVisible(true);
                path.setText(fd.getDirectory()+fd.getFile());
                changeImg(fd.getDirectory(), fd.getFile()); 
    	}
    }
    
    
    
    
    import java.awt.*;
    
    public class CanvasImmagine extends Canvas{
        Image img;
        public void setImage(Image img){
            this.img = img;
            repaint();
        }
        public void paint(Graphics g){
            g.drawImage(img, 0, 0, this);
        }
    }

    Adesso sotto Linux e Mac funziona ma con Windows non e non da nessuna eccezzione. Credo il problema sia nell'URL ma non ho idea di come modificarlo.

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320

    Moderazione

    Regolamento, punto 6:

    Formattazione del codice sorgente.
    Quando incollate una porzione di codice all'interno di un messaggio, utilizzate l'apposito tag
    [CODE]
    codice
    [/CODE]
    che può essere inserito automaticamente premendo il pulsante CODE: questo renderà il codice leggibile e facilmente comprensibile a tutti, agevolando gli utenti che desiderano aiutarvi.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    E' sicuramente un problema legato al carattere di separazione usato nel path del file.

    Ti ricordo che su Sistemi Unix (Linux e Mac) il path è /a/b.
    Su Windows invece \a\b.

    Usando File.separator di Java risolvi il problema.
    Esempio:

    Codice PHP:
    String path File.separator "a" File.separator "b"
    Gutta cavat lapidem
    [La goccia scava la pietra]
    ***
    (Ovidio)

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.