###実現したい事
Javaでローカルにある画像をアプレットで表示させて、ボタンを押すとその画像を別名で保存するというソースをこのサイトを参考に書いたのですが、ボタンを押した時点でアクセスが拒否されたとエラーがたくさん出てきます。
調べたらアプレットではローカルアクセスが難しいらしくて、こちらのサイトを参考に色々試してみたのですが、変わらずアクセスが拒否されたままでした。どうすればローカルにアクセスできるか分かる方回答お願いします。
###ソース
/*<applet code = "Image05.class" archive = "Image05.jar" width = "240" height = "240"></applet>*/ import java.awt.*;//ウィンドウの表示に必要 import java.awt.event.*;//ウィンドウのイベント処理に必要 import java.awt.image.*;//Imageの取り扱いに必要 import java.io.*;//Imageの読み込み import javax.imageio.*;//Imageの読み込み import java.applet.*; public class Image05 extends Applet implements ActionListener{ //Buttonの作成と設定 Button button=new Button("イメージの保存");//Buttonの作成 BufferedImage image; @Override public void init(){ setBackground(Color.WHITE); setLayout(new BorderLayout()); add(this.button, BorderLayout.NORTH); this.button.addActionListener(this);//Listenerの追加(イベントの処理先を指定) image=loadImage("test.jpg"); } //イメージをファイルから取り込む // 引数 - Imgaeのファイル名 // 戻り値 - 読み込んだイメージ BufferedImage loadImage(String name){ try{ FileInputStream in=new FileInputStream(name);//FileInputStreamを作る BufferedImage rv=ImageIO.read(in);//イメージを取り込む in.close();//閉じる return rv;//戻り値に読み込んだイメージをセット }catch(IOException e){ //エラー時の処理(エラーを表示)しnullを返す System.out.println("Err e="+e);//エラーを表示 return null;//null を返す } } //表示の必要があれば実行されるメソッド @Override public void paint(Graphics g){ BufferedImage bufferImage=makeImage();//表示用のイメージを作成 g.drawImage(bufferImage,0,0,this);//作成したイメージを画面に描く } //描画や保存に必要なイメージを作成する。 BufferedImage makeImage(){ int x2=getWidth();//画面の幅を取得 int y2=getHeight();//画面の高さを取得 int iw=image.getWidth(this);//イメージの幅を取得 int ih=image.getHeight(this);//イメージの高さを取得 int x0=0;//画面左位置 int y0=0;//画面上端位置 int x1=x2/2;//画面中央位置(横) int y1=y2/2;//画面中央位置(縦) BufferedImage bufferImage=new BufferedImage(x2,y2,BufferedImage.TYPE_INT_BGR);//Buffer用イメージを作成 Graphics2D g2=bufferImage.createGraphics();//描画用のGraphics2D型変数g2を取得 g2.setBackground(Color.WHITE);//背景色を白で指定 g2.clearRect(0, 0, x2, y2);//全体をクリア g2.drawImage(image, x0,y0,x2,y2,Color.WHITE,this);//画面の左上にイメージを縮小して表示 g2.dispose();//不要になったグラフィクスは廃却 return bufferImage;//作成したイメージを戻り値として返す } //イメージの保存 // image - 保存するイメージ // fileName-保存先のファイル // format - 書式(bmp,BMP.gif,GIF,jpg,JPG,JPEGなどが可能) // 戻り値 成功(true),失敗(false) boolean saveImage(BufferedImage image,String fileName,String format){ try{ OutputStream out=new FileOutputStream(fileName);//ファイルとアプリを繋ぐ ImageIO.write(image, format, out);//指定の形式で出力 return true;//成功したらtrueを返す。 }catch(IOException e){ //例外処理が発生したらエラーをコンソールに出して、falseを返す System.out.println("Err="+e);//エラー出力 return false;//falseを返す } } //ボタンが操作されやらイメージの保存を実行 @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == this.button){ BufferedImage image=makeImage();//イメージの作成 saveImage(image, "outtest.jpg", "JPG");//保存 } } }
###エラー内容
java.security.policy: file:/C:/Users/ユーザ名/.java.policyの構文解析エラー: 行1: [;]ではなく[?grant]が検出されました Exception in thread "AWT-EventQueue-1" java.security.AccessControlException: access denied ("java.io.FilePermission" "outtest.jpg" "write") at java.security.AccessControlContext.checkPermission(AccessControlContext.java:472) at java.security.AccessController.checkPermission(AccessController.java:884) at java.lang.SecurityManager.checkPermission(SecurityManager.java:549) at java.lang.SecurityManager.checkWrite(SecurityManager.java:979) at java.io.FileOutputStream.<init>(FileOutputStream.java:200) at java.io.FileOutputStream.<init>(FileOutputStream.java:101) at Image05.saveImage(Image05.java:78) at Image05.actionPerformed(Image05.java:92) at java.awt.Button.processActionEvent(Button.java:409) at java.awt.Button.processEvent(Button.java:377) at java.awt.Component.dispatchEventImpl(Component.java:4889) at java.awt.Component.dispatchEvent(Component.java:4711) at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:760) at java.awt.EventQueue.access$500(EventQueue.java:97) at java.awt.EventQueue$3.run(EventQueue.java:709) at java.awt.EventQueue$3.run(EventQueue.java:703) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90) at java.awt.EventQueue$4.run(EventQueue.java:733) at java.awt.EventQueue$4.run(EventQueue.java:731) at java.security.AccessController.doPrivileged(Native Method) at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80) at java.awt.EventQueue.dispatchEvent(EventQueue.java:730) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:205) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93) at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
###試したこと
javac -encoding UTF8 Image05.java でコンパイル
jar cvf Image05.jar Image05.class でjarファイル作成
appletviewer Image05.java でアプレット実行
###.java.policy
grant codeBase "http://localhost/Applet/tmp/*" { permission java.security.AllPermission; };
###参考サイト
上述の一つ目http://www.geocities.jp/inu_poti/java/meida/image05.html
上述の二つ目http://a4dosanddos.hatenablog.com/entry/2013/07/04/233122
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/07/21 00:50
2018/07/21 01:41