2010-10-07 4 views
1

Я чувствую себя тупой ......JNLP не сотрудничает JFileChooser Access Denied

Так что я пишу приложение Java, и если вы можете помочь мне получить эту работу, вы будете в состоянии видеть Это.

так что мой файл баночка здесь: http://team2648.com/OTIS2/admin/OmniNode2.8.jar

Я хотел бы, чтобы она могла быть использована в качестве веб-запуска приложения Java, я следовал учебник здесь: http://download.oracle.com/javase/tutorial/deployment/webstart/deploying.html

, так что я написал следующий файл JNLP, как указано:

<?xml version="1.0" encoding="UTF-8"?> 
<jnlp spec="1.0+" 
codebase="http://team2648.com/OTIS2/admin" 
href="test.jnlp"> 
<information> 
    <title>OmniNode Mapper</title> 
    <vendor>Techplex Engineer</vendor> 
</information> 
<resources> 
    <!-- Application Resources --> 
    <j2se version="1.6+" 
     href="http://java.sun.com/products/autodl/j2se"/> 
    <jar href="OmniNode2.8.jar" main="true" /> 

</resources> 
<application-desc 
    name="OmniNode Mapper" 
    main-class="omninode28.Driver" 
    width="300" 
    height="300"> 
</application-desc> 
<update check="background"/> 
</jnlp> 

Но, как вы увидите, если вы загружаете JNLP http://team2648.com/OTIS2/admin/test.jnlp
и запустить его, мы получаем следующее сообщение об ошибке (на ПК):

access denied (java.io.FilePermission C:\Users\MyUserName\Documents read) 

Исключение

java.security.AccessControlException: доступ запрещен (java.io.FilePermission C: \ Users \ Techplex Инженер \ Documents чтения)
на java.security.AccessControlContext.checkPermission (Unknown Source)
в java.security.AccessController.checkPermission (Unknown Source)
в java.lang.SecurityManager.checkPermission (Unknown Source)
в java.lang.SecurityManager.checkRead (Unknown Source)
на java.io.File.exists (Unknown Source)
на java.io.Win32FileSystem.canonicalize (Unknown Source)
в java.io.File.getCanonicalPath (Unknown Source)
в sun.awt.shell. Win32ShellFolderManager2.createShellFolder (Unknown Source)
на sun.awt.shell.Win32ShellFolderManager2.getPersonal (Unknown Source)
в sun.awt.shell.Win32ShellFolderManager2.get (Unknown Source)
в sun.awt.shell.ShellFolder. get (Неизвестный источник)
at javax.swing.filechooser.FileSystemView.getDefaultDirectory (Неизвестный источник)
at j avax.swing.JFileChooser.setCurrentDirectory (Unknown Source)
на javax.swing.JFileChooser (Unknown Source)
на javax.swing.JFileChooser (Unknown Source)
на omninode28.NodePanel (NodePanel.java...: 61)
в omninode28.EditPanel. (EditPanel.java:31)
в omninode28.Driver.main (Driver.java:25)
на sun.reflect.NativeMethodAccessorImpl.invoke0 (Родной метод)
at sun.reflect.NativeMethodAccessorImpl.inv Оке (Unknown Source)
на sun.reflect.DelegatingMethodAccessorImpl.invoke (Unknown Source)
в java.lang.reflect.Method.invoke (Unknown Source)
в com.sun.javaws.Launcher.executeApplication (Unknown Source)
at com.sun.javaws.Launcher.executeMainClass (Неизвестный источник)
at com.sun.javaws.Launcher.doLaunchApp (Unknown Source)
на com.sun.javaws.Launcher.run (Unknown Source)
на java.lang.Thread.run (Unknown Source)

Так что те файлы, которые он указывает на:

эта строка: fc = new JFileChooser();

Так что это заставляет меня думать, что мне нужно спросить у пользователя разрешение на запись в свою систему.

Я растерялся. Любая помощь была бы супер, Спасибо

Редактировать ... Должен ли я просто заставить пользователей напрямую загрузить Jar? плюсы минус?

ответ

2

вы должны подписать банки и выдавать разрешение на классы, добавив этот фрагмент в JNLP:

<security> 
    <all-permissions/> 
</security> 
0

Одним из возможных вариантов, ваша баночка не будет подписан, как упомянуто here

1

Очевидно, что это будет плохая идея для любого веб-сайта вы просматриваемой через, чтобы иметь возможность читать из локальной файловой системы. Так что это запрещено.

Возможно, лучший способ обойти это FileOpenService. Это дает приложениям простой интерфейс для выбора файла некоторого описания, которое может открывать (читать и, к сожалению, писать) пользовательские файлы без прямого доступа к файловой системе.

+1

FileOpenService только позволяет приложениям считывать файлы. Это FileSaveService, который подходит для записи. Ниже приведена демонстрация объекта FOS/FSS & FileContents. http://pscode.org/jws/api.html#fs –

+1

@Andrew Thompson 'FileOpenService' также позволяет изменять выбранные файлы. Перед файловым выбором, который раньше только что прочитал, есть диалоговое окно предупреждения о безопасности. Показывает, сколько внимания программисты уделяют предупреждениям безопасности. –

+0

К сожалению, «открытое» приглашение безопасности изменилось, так как оно сейчас довольно неточно. При приеме приглашения, даже с проверкой «всегда разрешать», по-прежнему появляется приглашение, когда пользователь переходит к сохранению файла. Или, по крайней мере, это поведение, которое я вижу в демо PSCode в настоящее время. Можете ли вы предоставить код или демоверсию, которая действует по-разному? –