2012-05-12 1 views
1

gameと呼ばれるJavaアプレットを作成しようとしています。これは、以前はスタンドアロンアプリケーションを作成していたことがあります。私はEclipseでそれをテストするとき私のアプレットは正常に動作しますが、私は私のウェブサイト上でそれを入れてみたときに、私はコンソールで次のエラーを取得する:アプレットがAccessControlExceptionをスローしているのはなぜですか?

java.lang.reflect.InvocationTargetException 
    at com.sun.deploy.util.DeployAWTUtil.invokeAndWait(DeployAWTUtil.java:116) 
    at sun.plugin2.applet.Plugin2Manager.runOnEDT(Plugin2Manager.java:3541) 
    at sun.plugin2.applet.Plugin2Manager.createApplet(Plugin2Manager.java:3072) 
    at sun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Plugin2Manager.java:1497) 
    at java.lang.Thread.run(Thread.java:680) 
Caused by: java.security.AccessControlException: access denied (java.util.PropertyPermission user.dir read) 
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:374) 
    at java.security.AccessController.checkPermission(AccessController.java:546) 
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:532) 
    at java.lang.SecurityManager.checkPropertyAccess(SecurityManager.java:1285) 
    at java.lang.System.getProperty(System.java:667) 
    at java.io.UnixFileSystem.resolve(UnixFileSystem.java:118) 
    at java.io.File.getAbsolutePath(File.java:501) 
    at game.<init>(game.java:117) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) 
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513) 
    at java.lang.Class.newInstance0(Class.java:355) 
    at java.lang.Class.newInstance(Class.java:308) 
    at sun.plugin2.applet.Plugin2Manager$13.run(Plugin2Manager.java:3060) 
    at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:199) 
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:682) 
    at java.awt.EventQueue.access$000(EventQueue.java:85) 
    at java.awt.EventQueue$1.run(EventQueue.java:643) 
    at java.awt.EventQueue$1.run(EventQueue.java:641) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:652) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:296) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:211) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:201) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:196) 
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:188) 
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 
Exception: java.lang.reflect.InvocationTargetException 

それはaccess denied (java.util.PropertyPermission user.dir read)言いますが、それはだところ、私が把握することはできませんユーザーのファイルシステムから何かを読み取ろうとしています。

at game.<init>(game.java:117)とも書かれていますが、私はファイルに入り、114行目でコンソールにメッセージ出力を行い、書かれませんでした。私はそれからpublic game()の117行目を見ていたかもしれないと思ったので、それを探して、それはMouseイベントのリスナーの開始点でした。これは、Javaが読み込みに許可を必要とするものであると私にはわかりました。そのため、すべてを削除して、すべてのインポートを削除してから、適切な対策を講じました。その後、ChromeとJavaの両方のキャッシュをクリアして再試行しました。同じエラー。

  1. これはどういう意味ですか、私はそれを間違って解釈していますか?
  2. それは117行だと言うと、それは117行ですか?
  3. なぜこれが起こっていますか?
  4. どうすれば修正できますか?
  5. これを今後どのように防ぐことができますか?参考のため

、ここpublic game()のコードは次のとおりです。

public game() throws MalformedURLException{ 

    JPanel board = new chessboard(); 
    board.setSize(320, 320); 
    board.setLocation(0, 0); 

    System.out.println("Got this far"); 

    Piece wp1 = new Piece(wpawn, a2); 
... 
    Piece bk = new Piece(bking, e8); 


    board.add(wp1); 
... 
    board.add(bk); 

    wp1.setLocation(wp1.square.getPoint()); 
...  
    bk.setLocation(bk.square.getPoint()); 

    add(board); 
    repaint(); 

    addMouseListener(new MouseAdapter(){ 
     public void mousePressed(MouseEvent evt){ 

      for (int i = 0; i < 8; i++){ 
       for (int j = 0; j < 8; j++){ 
        if (squares[i][j].piece != null) 
         System.out.println(squares[i][j].getPointString() + ": " + squares[i][j].piece.type); 
       } 
      } 

      Point p = evt.getPoint(); 
      if (0 < p.x && p.x < 319 && 0 < p.y && p.y < 319){ 
       Square clicked = getSquare(p); 
       System.out.println("up: " + clicked.getPointString()); 
       if (clicked.piece != null){ 
        pickedUp = true; 
        pickedUpPiece = clicked.piece; 
       } 
      } 
     } 
     public void mouseReleased(MouseEvent evt){ 
      if (pickedUp){ 
       Point p = evt.getPoint(); 
       if (0 < p.x && p.x < 319 && 0 < p.y && p.y < 319){ 
        System.out.println("down: " + getSquare(p).getPointString()); 
        movePiece(pickedUpPiece, getSquare(p).getColumn(), getSquare(p).getRow()); 
       } 
       pickedUp = false; 
      } 
      else System.out.println("Not picked up"); 
     } 
    }); 
} 

答えて

3

スタックトレースの重要な出力は次のとおりです。

at java.io.File.getAbsolutePath(File.java:501) 
at game.<init>(game.java:117) 

これは、そのあなたのgame.javaファイルを意味し、ライン117で、何かにgetAbsolutePath()を呼び出しています。ブラウザに埋め込まれたJavaアプレットは、ローカルファイルシステムにアクセスすることはできません。

+0

ワウ。 ファイルを初めてアップロードしたときと同じように、私のファイルにgetAbsolutePath呼び出しがありました。私はすぐにそれを削除し、ファイルを再アップロードしました。 それはまだどうですか?私はChromeのキャッシュとプラグインのデータを消去し、それ以来Javaキャッシュのすべてを削除しました。数回。 アプレットを適切に更新するにはどうすればよいですか?これは本当にイライラしています。私が知っているすべてのために、このすべての時間は大丈夫であり、私は非問題と戦ってきました。 –

+0

ええ、キャッシングは本当にイライラすることができます。あなたのビルドが間違いなく進行していること、jarファイルが実際に正しく作成されていること、Webサーバーへのアップロードが成功したこと、ファイルがWebサーバー上で置き換えられたこと、そしてブラウザが実際に200 OKあなたのjarファイルに対する要求が成功しました。 –

+0

Eclipseで実行すると問題なく動作します。ファイルがサーバーに正しく置き換えられています。ブラウザが200 OK要求を出していることを確認するにはどうすればよいですか? 私がしてきたのは、クラスファイルをアップロードし、HTMLファイルを ''とすることでした。私はアップロードする必要がある何か他にありますか?申し訳ありませんが、これで完全なnewbであるために、私はアプレットが本当に言及している大学のイントロJavaの本に行きます。 –

関連する問題