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