PDA

View Full Version : [JAVA] Applet fa le bizze


royaleagle
25-11-2008, 17:06
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(AccessController.java:546)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
at java.lang.SecurityManager.checkRead(SecurityManager.java:871)
at java.io.FileInputStream.<init>(FileInputStream.java:100)
at java.io.FileInputStream.<init>(FileInputStream.java: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)

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..

royaleagle
25-11-2008, 23:57
Dunque il problema è proprio quella lettura del file data.txt : non è proprio possibile leggere (soltanto leggere) un file? Va bene che il java è un linguaggio sicuro, però..:(

banryu79
26-11-2008, 11:08
Dovresti leggerti qualcosa sulle Applet: io non ne ho mai realizzata una fin'ora, però so che funzionano come sand-box e non credo tu possa da una Applet accedere tanto facilmente a dati contenuti nel pc client di chi la usa (per ovvie ragioni).

franklyn
26-11-2008, 11:20
Le applet hanno delle limitazioni sui client su cui vengono eseguite,
tra queste limitazioni non possono accedere ai file di sistema.
Per fare quello che vuoi devi fare una firma digitale per l'applet.

Leggiti un pò questo link mi sembra la via più semplice, anche se cmq è un argomento vasto.
http://www.max74.it/blog/2007_11_01_archive.html

Spero di esserti stato di aiuto
;)

royaleagle
26-11-2008, 13:35
Io ho provato a mettere in una cartella il jar firmato (dove dentro c'è anche il famoso data.txt nella cartella data) e il foglio html: ed ecco l'errore.
Cioè, io non leggo/scrivo da disco (o mi sbaglio?) ma leggo dal file che sarà presente nel mio spazio web!

royaleagle
26-11-2008, 16:27
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. :confused:

royaleagle
26-11-2008, 19:53
Ok ho risolto! :)
Un grande ringraziamento a ^TiGeRShArK^ e agli altri che mi hanno risposto.