1

ほんまにやばい気がする……

私はJavaアプリを書いています。これを機能させるのを手伝ってくれれば、それを見ることができます。

私のjarファイルはここにあります:http://team2648.com/OTIS2/admin/OmniNode2.8.jar

Java web-start アプリケーションとして使用できるようにしたいのですが、ここのチュートリアルに従っていました: 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
をダウンロードして 実行するとわかるように、次のエラーが発生します (PC の場合):

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

例外

java.security.AccessControlException: アクセスが拒否されました (java.io.FilePermission C:\Users\Techplex Engineer\Documents read)
at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at
java.security.AccessController.checkPermission(Unknown Source)
java.lang.SecurityManager.checkPermission(不明なソース)
で java.lang.SecurityManager.checkRead(不明なソース)
で java.io.File.exists(不明なソース)
で java.io.Win32FileSystem.canonicalize(不明なソース)
java. sun.awt.shell.Win32ShellFolderManager2.createShellFolder
の io.File.getCanonicalPath (不明なソース) (不明なソース)
sun.awt.shell.Win32ShellFolderManager2.getPersonal の (不明なソース)
sun.awt.shell.Win32ShellFolderManager2.get (不明なソース)
で sun.awt.shell.ShellFolder.get (不明なソース)
で javax.swing.filechooser.FileSystemView.getDefaultDirectory (不明なソース)
で javax.swing.JFileChooser.setCurrentDirectory (未知のソース)
at javax.swing.JFileChooser.(未知のソース)
at javax.swing.JFileChooser.(未知のソース)
at omninode28.NodePanel.(NodePanel.java:61)
at omninode28.EditPanel.(EditPanel.java:31)
omn​​inode28.Driver.main(Driver.java:25)
で sun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブ メソッド)
で sun.reflect.NativeMethodAccessorImpl.invoke(未知のソース)
で sun.reflect.DelegatingMethodAccessorImpl.invoke(未知のソース) で
java.lang.reflect.Method.invoke (不明なソース)
com.sun.javaws.Launcher.executeApplication (不明なソース)
com.sun.javaws.Launcher.executeMainClass (不明なソース)
com.sun.javaws.Launcher .doLaunchApp (不明なソース)
の com.sun.javaws.Launcher.run (不明なソース)
の java.lang.Thread.run (不明なソース)

したがって、それが指すファイルは次のとおりです。

この行: fc = new JFileChooser();

したがって、これにより、ユーザーのシステムに書き込む許可をユーザーに求める必要があると信じるようになります。

私は混乱しています。どんな助けでも素晴らしいでしょう、ありがとう

編集...ユーザーにJarを直接ダウンロードさせるべきですか? 長所短所?

4

3 に答える 3

3

このスニペットを jnlp に追加して、jar に署名し、クラスにアクセス許可を付与する必要があります。

<security>
  <all-permissions/>
</security>
于 2010-10-07T07:22:10.120 に答える
1

閲覧した Web サイトがローカル ファイルシステムから読み取れるようにすることは、明らかに悪い考えです。したがって、直接は許可されません。

おそらく、これを回避する最善の方法は、FileOpenService. これにより、アプリケーションは、ファイル システムに直接アクセスすることなく、ユーザーが選択したファイルを開く (読み取り、そして残念ながら書き込み) ことができる、何らかの説明のファイル チューザーへの単純なインターフェイスを提供します。

于 2010-10-07T03:02:59.433 に答える
0

1 つの可能性は、ここで述べたように、jar が署名されていないことです。

于 2010-10-07T02:33:27.393 に答える