AccessControlException in Java-applet

Ik heb een applet gemaakt binnen een webpagina, maar telkens als ik het uitvoer, krijg ik dit:

Exception in thread "Thread-13" java.security.AccessControlException: access denied ("java.io.FilePermission" "defensebg.png" "read")
    at java.security.AccessControlContext.checkPermission(Unknown Source)
    at java.security.AccessController.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkPermission(Unknown Source)
    at java.lang.SecurityManager.checkRead(Unknown Source)
    at java.io.File.canRead(Unknown Source)
    at javax.imageio.ImageIO.read(Unknown Source)
    at Defense.run(Defense.java:63)
    at java.lang.Thread.run(Unknown Source)

Hoe los ik dit op?

0

2 antwoord

Omdat ik iets weet over je applet en ervan overtuigd ben dat deze afbeeldingen inherent zijn aan de applicatie, zal ik een andere kant kiezen voor paulms4.

Vergeet de instanties Bestand . Ze zijn hiervoor noch werkbaar, noch noodzakelijk. Alleen een vertrouwde applet heeft toegang tot een -bestand , maar zelfs dan is de enige plaats waar een applet een -bestand kan maken een verwijzing naar locaties in het bestandssysteem van de pc van de gebruiker. Het is duidelijk dat de afbeeldingen voor uw applet niet op die manier beschikbaar zijn (OK - ze bevinden zich mogelijk in een browsercache, maar dat heeft geen zin voor ons).

It would be more typical (& easier) to access applet resource by URL. An URL can be established relative to the code-base or document-base of the applet. If the images are actually inside a Jar, they become an embedded resource - see the info. page as to how to gain an URL.

De meeste methoden in de J2SE die een 'alleen-lezen'-resource laden, accepteren Bestand , URL of InputStream . Ik gebruik de URL het vaakst voor het algemene nut ervan. Een URL kan een webresource, een bestand op het lokale bestandssysteem of een bron diep in een Jar-bestand (hetzij of op het web of in het lokale bestandssysteem) voorstellen.

3
toegevoegd
goed antwoord! Je hebt absoluut gelijk.
toegevoegd de auteur paulsm4, de bron
@ paulsm4 Het gebruik van een Bestand wanneer een URL nodig is, is een veelgemaakte fout bij het ontwikkelen van een applet of JWS-app. Het duikt ook op in andere soorten apps., Maar minder regelmatig.
toegevoegd de auteur Andrew Thompson, de bron

Vraag: Hoe los ik dit op?

A: Uh - probeer geen bestanden op de client-pc te lezen vanuit een applet?

Of lees over "Beleidsbestanden":

Java-applets worden uitgevoerd in een veilige "sandbox". Dit is inherent aan het ontwerp - voor de veiligheid van de eindgebruiker:

2
toegevoegd