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の両方のキャッシュをクリアして再試行しました。同じエラー。
- これはどういう意味ですか、私はそれを間違って解釈していますか?
- それは117行だと言うと、それは117行ですか?
- なぜこれが起こっていますか?
- どうすれば修正できますか?
- これを今後どのように防ぐことができますか?参考のため
、ここ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");
}
});
}
ワウ。 ファイルを初めてアップロードしたときと同じように、私のファイルにgetAbsolutePath呼び出しがありました。私はすぐにそれを削除し、ファイルを再アップロードしました。 それはまだどうですか?私はChromeのキャッシュとプラグインのデータを消去し、それ以来Javaキャッシュのすべてを削除しました。数回。 アプレットを適切に更新するにはどうすればよいですか?これは本当にイライラしています。私が知っているすべてのために、このすべての時間は大丈夫であり、私は非問題と戦ってきました。 –
ええ、キャッシングは本当にイライラすることができます。あなたのビルドが間違いなく進行していること、jarファイルが実際に正しく作成されていること、Webサーバーへのアップロードが成功したこと、ファイルがWebサーバー上で置き換えられたこと、そしてブラウザが実際に200 OKあなたのjarファイルに対する要求が成功しました。 –
Eclipseで実行すると問題なく動作します。ファイルがサーバーに正しく置き換えられています。ブラウザが200 OK要求を出していることを確認するにはどうすればよいですか? 私がしてきたのは、クラスファイルをアップロードし、HTMLファイルを ''とすることでした。私はアップロードする必要がある何か他にありますか?申し訳ありませんが、これで完全なnewbであるために、私はアプレットが本当に言及している大学のイントロJavaの本に行きます。 –