Gå til innhold

access denied (java.io.FilePermission...), easyIO


Anbefalte innlegg

Jeg er i ferd med å lage en applet som blandt annet skal lagre date på en fil. Jeg bruker pakken easyIO som jeg er vant til fra INF1000;

 

Out lagrebrukere = new Out("Tekstfiler/Brukere.txt");

 

Det fører imidlertid til følgende feilmelding:

 

access denied (java.io.FilePermission Tekstfiler/Brukere.txt write)

hele feilmeldinge ligger i spoileren:

 

java.security.AccessControlException: access denied (java.io.FilePermission Tekstfiler/Brukere.txt write)

at java.security.AccessControlContext.checkPermission(AccessControlContext.java:342)

at java.security.AccessController.checkPermission(AccessController.java:553)

at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)

at java.lang.SecurityManager.checkWrite(SecurityManager.java:979)

at java.io.FileOutputStream.<init>(FileOutputStream.java:198)

at java.io.FileOutputStream.<init>(FileOutputStream.java:131)

at java.io.FileWriter.<init>(FileWriter.java:78)

at easyIO.Out.<init>(Out.java:78)

at easyIO.Out.<init>(Out.java:68)

at Database.addBruker(Database.java:17)

at GangetestApplet.brukervalg(GangetestApplet.java:49)

at GangetestApplet.<init>(GangetestApplet.java:37)

at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)

at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:5

)

at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImp

.java:45)

at java.lang.reflect.Constructor.newInstance(Constructor.java:532)

at java.lang.Class.newInstance0(Class.java:372)

at java.lang.Class.newInstance(Class.java:325)

at sun.applet.AppletPanel.createApplet(AppletPanel.java:798)

at sun.applet.AppletPanel.runLoader(AppletPanel.java:727)

at sun.applet.AppletPanel.run(AppletPanel.java:380)

at java.lang.Thread.run(Thread.java:636)

 

 

Jeg har brukt easyIO en god del og har aldri fått den feilmeldingen før, er det noen som har noen formeing om hva som kan forårsake den?

 

Koden er fordelt på to filer:

Database.java

 

import java.util.*;

import easyIO.*;

 

class Database{

HashMap resultatene;

HashMap <String,Bruker> brukerne;

String navn[] = {"Ny bruker", "Pelle", "Kristin", "Oskar"};

 

 

Database(){

//In lesebrukere = new In("Brukere.txt");

 

brukerne = new HashMap <String, Bruker>();

}

 

public void addBruker(Bruker bruker){

Out lagrebrukere = new Out("Tekstfiler/Brukere.txt");

brukerne.put(bruker.brukernavn, bruker);

lagrebrukere.outln(bruker.brukernavn);

lagrebrukere.close();

}

 

public Bruker hentBruker(String brukernavn){

Bruker bruker = new Bruker(brukernavn);

return bruker;

}

 

public void visTop10(){

}

public void visBesteResultat(Bruker bruker){

}

}

 

class Bruker{

String brukernavn, fornavn, etternavn, epostadresse;

ArrayList resultater = new ArrayList();

 

Bruker(String brukernavn){

this.brukernavn = brukernavn;

}

}

 

GangetestApllet:

 

import java.util.Random;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import java.net.URL;

 

 

public class GangetestApplet extends JApplet implements ActionListener{

 

JButton start;

JLabel viserbruker;

JTextField textfield;

JTextArea textarea;

Bildepanel bildepanel;

Container Panel;

LayoutManager Layout;

Database database;

String navn[];

Bruker bruker;

 

public GangetestApplet(){

database = new Database();

 

textfield = new JTextField(20);

textarea = new JTextArea(15,20);

Layout = new FlowLayout();

bildepanel = new Bildepanel();

start = new JButton("Start");

Panel = getContentPane();

textarea.setEditable(false);

Panel.setLayout (Layout);

Panel.add(start);

Panel.add(textfield);

Panel.add(textarea);

getContentPane().add(bildepanel);

Panel.setBackground (Color.cyan);

viserbruker = new JLabel(brukervalg().brukernavn);

Panel.add(viserbruker);

start.addActionListener(this);

}

 

Bruker brukervalg(){

 

Object object = (JOptionPane.showInputDialog(null, "Velg bruker", "Brukervalg", JOptionPane.INFORMATION_MESSAGE, null,database.navn,database.navn[0]));

String brukernavn = (object.toString());

 

if(brukernavn.equals("Ny bruker")){

bruker = new Bruker(JOptionPane.showInputDialog(null, "Skriv inn navn"));

database.addBruker(bruker);

}else{

bruker = database.hentBruker(brukernavn);

}

return bruker;

}

public void actionPerformed(ActionEvent e){

new Gangetest(textfield, textarea);

}

}

 

class Bildepanel extends JPanel{

private ImageIcon bilde;

 

public Bildepanel(){

URL kilde = Bildepanel.class.getResource("Numerical.jpg");

bilde = new ImageIcon(kilde);

}

 

public void paintComponent(Graphics g){

super.paintComponent(g);

 

if (bilde != null){

bilde.paintIcon(this, g, 0, 0);

}else

g.drawString( "Fant ikke bildet!", 10, 50 );

}

 

public Dimension getPreferredSize(){

if (bilde != null)

return new Dimension(bilde.getIconWidth(), bilde.getIconHeight());

else

return new Dimension( 200, 100 );

}

}

 

class Gangetest implements ActionListener{

 

int x, y, svar, riktig;

int delay = 30000;

Random r;

Timer timer;

ActionListener listener;

JTextField textfield;

JTextArea textarea;

Bildepanel bildepanel;

String string1, string2;

 

Gangetest(JTextField textfield, JTextArea textarea){

this.textfield = textfield;

this.textarea = textarea;

textfield.setText("");

textarea.setText("");

timer = new Timer(delay,listener);

timer.addActionListener(this);

textfield.addActionListener(this);

r = new Random();

timer.restart();

gangetest(0,0);

}

 

public void gangetest(int xx, int yy){

 

do{

x = tilfeldigHeltall();

}while(x == xx);

do{

y = tilfeldigHeltall();

}while(y == yy);

textfield.setText(" " + x + " * " + y + " = ");

string1 = textfield.getText();;

textfield.grabFocus();

//textfield.setEditable(true);//Virker ikke

}

 

public int tilfeldigHeltall(){

int t = r.nextInt(8)+2;

return t;

}

 

public void actionPerformed(ActionEvent e){

 

if(e.getSource()== timer){

timer.stop();

textarea.append("\nDu hadde " + riktig + " riktige");

 

}else if(timer.isRunning()){

String reply;

string2 = textfield.getText();

textarea.append(string2);

reply = string2.substring(string1.length());

if(x * y == Integer.parseInt(reply)){

textarea.append(" RIKTIG!\n");

riktig++;

gangetest(x,y);

}else{

textarea.append(" FEIL!\n");

textfield.setText(string1);//Brukeren må gi riktig svar på hvert regnestykke!

}

//textfield.setEditable(false);//Virker ikke

}

}

}

 

 

GangetestApplet1.htm

 

<HTML>

<HEAD>

<TITLE>Gangetest</TITLE>

</HEAD>

<BODY>

<P>Gangetest:

<BR>

<APPLET CODE="GangetestApplet.class" WIDTH=1000 HEIGHT=800>

Webleseren støtter ikke Java!

</APPLET>

</BODY>

</HTML>

 

Lenke til kommentar
Videoannonse
Annonse
Når et program kjører som applet, så kjører det vel som standard i en slags beskyttet modus (som ikke tillater appleten i å gjøre hva som helst på klientmaskinen). Detaljene kjenner jeg ikke.

Ja, det er vistnok riktig. Jeg får google litt så løser det seg nok, men dersom noen har løsningen klar så er jeg takknemlig.

Lenke til kommentar
En Applet som skal ha tilgang til nettverk eller filsystem MÅ være "signed". Dette kan du gjøre selv uten et "ekte" sertifikat. Søk etter "java self signing" eller liknendes så finner du nok ut av det ;)

Takk for tipset, jeg finner nok ut av det nå som jeg vet hva som er problemet. Faktisk har jeg funnet en oppskrift, men jeg må ta det i helgen når jeg har bedre tid. :)

Lenke til kommentar

Hvis du bruker Netbeans kan du kikke på properties til prosjektet -> Web Start. Her kan du skru på web-start som igjen gjør det mulig å sette på "self signed" (mulig du må inn på Run og huke vekk "Run with Java Web Start" for å kjøre koden fra Netbeans).

Ellers finnes det mange guider på dette.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...