質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

4回答

923閲覧

アプレットでローカルアクセスしたい

aiueoaiueoaiue

総合スコア94

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

1クリップ

投稿2018/07/20 13:47

###実現したい事
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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

Javaアプレットは、9月にリリース予定のJava 11で完全廃止されます。古いランタイムに必死にしがみつかざるを得ない、よほど特殊な事情があるのでない限り、もはや既存のJavaアプレットも移行しなければならない段階です。

今からJavaアプレットを作ったところで、動かせるランタイムすらなくなりつつあります。別な技術に乗り換えましょう。

投稿2018/07/20 14:16

maisumakun

総合スコア145121

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aiueoaiueoaiue

2018/07/21 00:50

アプレットに代わる別な技術って何があるのですか?ブラウザ上で実行できるものを調べてみても、Webサービスはたくさん出てくるのですが別の技術というのはなかなか見つかりませんでした。
maisumakun

2018/07/21 01:41

「ブラウザ上で実行できるもの」は、現代ではほぼJavaScript一択です。
guest

0

Javaアプレットが今後使えなくなるというのはその通りですが、どうしてもやりたいのであれば…

Javaアプレットは本来ローカルファイルにアクセスできません。それは、ウェブサイトにアクセスして悪意のJavaアプレットが動いて、ローカルファイルを盗んだり、書き換えたり、削除するような攻撃を避けるためです。
しかし、それでは不便ということで、署名つきアプレットというものが考案されました。これはアプレットに電子署名して、利用者は署名を確認して信頼できる相手であれば実行を許可するというものです。

ご質問の手順には、肝心のアプレットの署名がないようですので、参考記事の手順により署名をして、結果がどうなるかを試すべきかと思います。

投稿2018/07/28 07:58

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Javaアプレットは必要ありません。
以下の方法を使えば任意の言語でブラウザの制限を超えた処理を書くことが出来ます。

Webアプリの限界を超える方法

投稿2018/07/27 15:31

編集2018/07/27 15:38
tekka

総合スコア514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ここの掲示板の過去ログを参考に。
Applet廃止の対応

投稿2018/07/21 00:01

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問