Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Problema esecuzione applet

    Ho scritto una galleria fotografica in Java, l'ho poi adattata sotto forma di applet e funziona (sotto Eclipse e anche da riga di comando)!
    Inserendola in una pagina html e lanciando il browser saltan fuori gli errori:

    java.security.AccessControlException: access denied (java.io.FilePermission data/data.txt read)
    at java.security.AccessControlContext.checkPermission (AccessControlContext.java:323)
    at java.security.AccessController.checkPermission(Acc essController.java:546)
    at java.lang.SecurityManager.checkPermission(Security Manager.java:532)
    at java.lang.SecurityManager.checkRead(SecurityManage r.java:871)
    at java.io.FileInputStream.<init>(FileInputStream.jav a:100)
    at java.io.FileInputStream.<init>(FileInputStream.jav a:66)
    at FotoGallery.azioniFile(FotoGallery.java:91)
    at FotoGallery.init(FotoGallery.java:47)
    at sun.applet.AppletPanel.run(AppletPanel.java:424)
    at java.lang.Thread.run(Thread.java:619)

    codice:
    public class FotoGallery extends JApplet implements ActionListener{
    	JButton b1, b2, b3, b4;
    	JComboBox cb;
    	JPanel cmd;
    	JLabel pic;
    	Container c;
    	String[] titoli;
    	ImageIcon img;
    	Vector<String> nomi = new Vector<String>();
    	Vector<Integer> numeri = new Vector<Integer>();
    	int currentPhoto = 0;
    	
    	public FotoGallery(){}
    	
    	public void init(){
    		
    		azioniFile();
    		nomi.add(titoli[0]);
    		nomi.add(titoli[1]);
    		nomi.add(titoli[2]);
    		numeri.add(4);
    		numeri.add(3);
    		numeri.add(2);
    				
    		b1 = new JButton("<");
    		b2 = new JButton("<<");
    		b3 = new JButton(">");
    		b4 = new JButton(">>");
    		cmd = new JPanel();
    		pic = new JLabel();
    		c = getContentPane();
    		cb = new JComboBox(titoli);
    		
    		cb.setSelectedIndex(-1);
    		cb.addActionListener(this);
    		
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    		b4.addActionListener(this);
    		
    		cmd.add(b1);
    		cmd.add(b2);
    		cmd.add(cb);
    		cmd.add(b3);
    		cmd.add(b4);
    		
    		c.add(cmd, BorderLayout.NORTH);
    		c.add(pic);
    		
    		setSize(800,600);
    	}
    	
    	public void azioniFile(){
    		/* Acquisizione informazioni da "data/data.txt" */
    		String riga = "", nome;
    		int num;
    		FileInputStream in = null;
    		
    		try{
    			in = new FileInputStream("data/data.txt");
    		} catch (FileNotFoundException e) {
    			e.printStackTrace();
    		} 
    		System.out.println("File aperto!");
    		
    		InputStreamReader input = new InputStreamReader(in);
    		BufferedReader reader = new BufferedReader(input);
    				
    		//...varie operazioni sul file ...//
    			
    		titoli = new String[nomi.size()];
    		for(int z = 0; z < nomi.size(); z++){
    			titoli[z] = nomi.elementAt(z);
    		}
    	}
    	
    	public void actionPerformed(ActionEvent e) {
    		if(e.getSource() == b3){
    			if( currentPhoto == numeri.elementAt(cb.getSelectedIndex()) )
    				currentPhoto = 1;
    			else	currentPhoto++;
    			aggiornaLabel(cb.getSelectedIndex(), currentPhoto);
    		}
    		//...operazioni analoghe per b1,b2,b4...//
    		else if(e.getSource() == cb){
    			caricaAlbum(cb.getSelectedIndex());
    		}
    	}
    	
    	public void caricaAlbum(int index){
    		System.out.println("Entro in caricaAlbum " + index);
    		currentPhoto = 1;
    		aggiornaLabel(index, currentPhoto);
    	}
    
    	public void aggiornaLabel(int index, int foto){
    		ImageIcon icon = creaIcona(index + "/" + foto + ".jpg");
    		pic.setIcon(icon);
    		pic.setHorizontalAlignment(JLabel.CENTER);
    		if (icon != null) 	pic.setText(null);
    		else				pic.setText("Impossibile trovare la pagina");
    	}
    	
    	public static ImageIcon creaIcona(String path) {
    	    URL imgURL = FotoGallery.class.getResource(path);
    	    if (imgURL != null) {
    	      return new ImageIcon(imgURL);
    	    }else{
    	      System.err.println("Impossibile trovare il file: " + path);
    	      return null;
    	    }
    	  }
    
    }

    Avete qualche idea? Magari è uno dei problemi più ricorrenti per le applet, non so..

  2. #2
    Preciso la domanda: è possibile leggere un file da Applet? Perchè l'errore che mi da è proprio quello!!

  3. #3
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    E' possibile leggere un file ( ma non chiedermi come, perchè al momento non ricordo ) però è possibile, conoscendo ovviamente la struttura del s.o. che c'è a lato client.
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Devi sapere che le applet sono dei piccoli programmi che girano all'interno di una "sendbox", che ne limita le funzionalità.
    Tra le varie limitazioni (dovute a problemi di sicurezza, fai una ricerca se ne è parlato tanto) c'è appunto l'impossibilità di accedere al client.

    Quindi, non puoi accedere ai file presenti sul client.

    Come si supera questo ostacolo? Si supera firmando l'applet.

    Fai una ricerca in questo forum con chiave "firma applet" e troverai diverso materiale a riguardo.


    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

  5. #5
    Utente di HTML.it L'avatar di @DI3GO@
    Registrato dal
    Nov 2008
    Messaggi
    537
    Originariamente inviato da LeleFT
    Devi sapere che le applet sono dei piccoli programmi che girano all'interno di una "sendbox", che ne limita le funzionalità.
    Tra le varie limitazioni (dovute a problemi di sicurezza, fai una ricerca se ne è parlato tanto) c'è appunto l'impossibilità di accedere al client.

    Quindi, non puoi accedere ai file presenti sul client.

    Come si supera questo ostacolo? Si supera firmando l'applet.

    Fai una ricerca in questo forum con chiave "firma applet" e troverai diverso materiale a riguardo.


    Ciao.
    Ecco una cosa fondamentale che non mi ricordavo!!!
    Nipote: persona incompetente, con le soli doti di "copia/incolla" e la creazione automatica di siti internet ed interfaccie grafiche.Compie lavori apparentemente qualificati e richiesta una modifica sparisce in quatemala con i pochi soldi ottenuti.[...] Fonte la Diegonzelli

  6. #6
    No, precisiamo: io ho fatto 2 prove diverse in locale.
    Dentro una cartella ho messo:

    1) il file .class e le cartelle da cui attingere le immagini e il data.txt
    2) il jar con dentro tutto

    (oltre al file .html) e in entambi i casi il risultato è stato negativo.
    Nel caso del jar ho anche provveduto a firmare l'applet con jarsigner: nel browser vedo l'avvertimento della firma ma poi l'applet mi da lo stesso problema.

  7. #7
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Allora facciamo attenzione:

    1) Le limitazioni imposte dalla sendbox all'applet riguardano il client, non il server da cui l'applet viene scaricata... se le prove le fai in locale, server e client coincidono quindi potresti avere l'impressione che l'applet funzioni a dovere (ma non sembra essere il tuo caso, in questo momento) senza che ti saltino all'occhio eventuali errori. Quindi, una prima cosa da fare è separare client da server.

    2) Se l'applet è firmata, ma comunque non funziona devi dare ulteriori informazioni riguardo la struttura delle directory (perchè io, sinceramente, non ho ben capito comi hai strutturato il tutto: perchè da una parte il JAR e da un'altra i .class? O l'uno o l'altro...).

    Da quello che ho potuto capire del codice che hai postato, l'applet va in cerca di un file chiamato "data.txt" che deve risiedere all'interno di una directory chiamata "data" la quale deve trovarsi allo stesso livello del file JAR (o dei file .class o della radice del package, se ne hai indicato uno). Questa è una forte limitazione per un'applet: non puoi sapere a priori dove il broser del client andrà a salvare effettivamente il JAR (o i .class) per poi eseguirli... sarebbe più corretto specificare un percorso assoluto all'interno del file system del client.


    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

  8. #8
    Quelle sono 2 prove separate, non ho diviso il tutto in 2 cartelle.
    Non ho le idee molto chiare sui limiti delle applet, ma comunque è possibile fare quello che voglio io (leggere un file txt da una cartella che è dentro il jar che pubblicherò nel mio spazio web)?

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    E qui c'è un'altra cosa che non avevi specificato: il file txt risiede all'interno del JAR?

    Allora non è quello il modo di leggerlo. Per poter leggere un file che si trova all'interno di un archivio JAR hai sostanzialmente due modi:

    1) Estrarre il file e salvarlo da qualche parte per poi leggerlo.
    2) Utilizzare la classe JarFile per poter leggere una ZipEntry che rappresenterà il file contenuto del JAR (vedi package java.util.jar).


    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

  10. #10
    Ho risolto il problema relativo al file, e puntuale è arrivato un altro problema: StringIndexOutOfBoundsException..
    Possibile che questo succeda solo caricando l'applet nel mio spazio web? Da locale mi funziona tutto.

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 © 2026 vBulletin Solutions, Inc. All rights reserved.