我一直在研究一個音頻播放器小程序,並且遇到了讓它在網絡瀏覽器中運行的問題。它在eclipse中的applet viewer中非常完美,但是當我在Google Chrome中嘗試時它不起作用。我甚至嘗試過生成的eclipse生成的applet文件,但它也不起作用,可能與eclipse運行它的方式有關。Applet文件訪問
這是HTML文件,但不允許訪問MP3文件,或特殊字體我做:
<html>
<meta http-equiv="Content-Type" content="text/html; charset=MacRoman"/>
<body>
<applet code="DOSPlayer.class" archive="DOSPlayer.jar, basicplayer3.0.jar, commons-logging-1.1.1.jar, mp3spi1.9.5.jar, tritonus_share-0.3.6.jar, jl1.0.1.jar" width="450" height="350" >
</applet>
</body>
</html>
錯誤我得到的,因爲它無法訪問文件因爲訪問權限:
java.security.AccessControlException: access denied (java.io.FilePermission fonts\DOSFont.ttf 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.FileInputStream.<init>(Unknown Source)
at DOSPlayer.initFont(DOSPlayer.java:398)
at DOSPlayer.<init>(DOSPlayer.java:413)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
java.lang.reflect.InvocationTargetException
at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.runOnEDT(Unknown Source)
at sun.plugin2.applet.Plugin2Manager.createApplet(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.security.AccessControlException: access denied (java.io.FilePermission mp3 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.list(Unknown Source)
at java.io.File.listFiles(Unknown Source)
at DOSPlayer.getFiles(DOSPlayer.java:259)
at DOSPlayer.<init>(DOSPlayer.java:415)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Unknown Source)
at java.lang.Class.newInstance0(Unknown Source)
at java.lang.Class.newInstance(Unknown Source)
at sun.plugin2.applet.Plugin2Manager$12.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.awt.EventQueue$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Exception: java.lang.reflect.InvocationTargetException
我知道錯誤是由代碼這兩個片段來:
//path is "mp3/"
public String[] getFiles(String path) {
String[] songs = new String[501];
String files;
File folder = new File(path);
File[] listOfFiles = folder.listFiles();
//gets all mp3 files within mp3 folder
try {
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile())
{
files = listOfFiles[i].getName();
if (files.endsWith(".mp3")) {
songs[songNum] = files;
songNum++;
playableSongs++;
}
}
}
} catch (Exception e) {
System.out.println("Error Here");
e.printStackTrace();
return null;
}
return songs;
}
/////////////////////////////////
public void initFont() {
try {
//URL fontUrl = new URL("fonts/DOSFont.ttf");
File file = new File("fonts/DOSFont.ttf"); // where ever it is from
FileInputStream fontPath = new FileInputStream(file);
dosFont = Font.createFont(Font.TRUETYPE_FONT, fontPath);//fontUrl.openStream());
dosFont = dosFont.deriveFont(Font.PLAIN,19);
GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();
ge.registerFont(dosFont);
font = true;
} catch(Exception e) {
e.printStackTrace();
font = false;
}
}
我已經嘗試過對小程序進行簽名,但這不起作用,它授予對從網頁查看小程序的人員訪問文件的權限。我也嘗試編輯策略文件,但我無法讓它工作,但它仍然是一個選項。
我有這個幾個小時的麻煩,不知道該怎麼做,任何幫助將不勝感激。
如何調用getFiles(...)方法? – user592704 2012-08-07 21:48:51
File file = new File(「fonts/DOSFont.ttf」);客戶機上真的存在嗎? – user592704 2012-08-07 21:50:13
是的,它存在。它只是不允許訪問它。 – M4trixSh4d0w 2012-08-07 21:54:09