0

私は、コンストラクタの機能の1つに画像が必要なアプリケーションを作成しています。画像はJFileChooserを使用して選択され、JLabelに表示されます。私の問題は、画像にアクセスするためのセキュリティ特権がないことです。私は絶対パスを取得するかどうか、ファイルが存在するかどうかを確認するためにテストを行い、パスを取得し、後者のパスを取得しました。だから私は少なくとも私のアプリのアクセスを与えるだけで写真を取得するには?javaセキュリティがJfilechooserを使用して写真を撮ることを許可しない

私のコード

JFileChooser chooser = new JFileChooser(); 
      chooser.setFileFilter(new FileNameExtensionFilter("jpg","png")); 
      int returnVal = chooser.showOpenDialog(diag); 
      if(returnVal == JFileChooser.APPROVE_OPTION) { 
       weaponImg = new ImageIcon(TempDialogs.class.getResource(chooser.getSelectedFile().getAbsolutePath())); 
       weaponPic.setIcon(weaponImg); 
       weaponPic.revalidate(); 
       weaponPic.repaint(); 

マイエラー

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at javax.swing.ImageIcon.<init>(Unknown Source) 
at ui.TempDialogs$5.mouseClicked(TempDialogs.java:171) 
at java.awt.Component.processMouseEvent(Unknown Source) 
at javax.swing.JComponent.processMouseEvent(Unknown Source) 
at java.awt.Component.processEvent(Unknown Source) 
at java.awt.Container.processEvent(Unknown Source) 
at java.awt.Component.dispatchEventImpl(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source) 
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source) 
at java.awt.Container.dispatchEventImpl(Unknown Source) 
at java.awt.Window.dispatchEventImpl(Unknown Source) 
at java.awt.Component.dispatchEvent(Unknown Source) 
at java.awt.EventQueue.dispatchEventImpl(Unknown Source) 
at java.awt.EventQueue.access$500(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.awt.EventQueue$3.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.awt.EventQueue$4.run(Unknown Source) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) 
at java.awt.EventQueue.dispatchEvent(Unknown Source) 
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
at java.awt.EventDispatchThread.run(Unknown Source) 
+0

の可能性のある重複[何NullPointerExceptionであり、どうすれば修正できますか?](https://stackoverflow.com/questions/218384/what-is-a-nullpointerexception-and-how-do-i-fix-it) –

+0

@PJMeisch Didあなたは私の全質問メイトを読んでいますか? –

+0

はい、NPEを取得してデバッグする必要があります –

答えて

2

Javaのセキュリティが私を許可していません。..

これはスタックトレース言及にもかかわらず、セキュリティとは何の関係もありませんいくつかの行には「セキュリティ」があります。 ...間違って不必要に複雑でもある

weaponImg = new ImageIcon(TempDialogs.class.getResource(chooser.getSelectedFile().getAbsolutePath())); 

本当の問題は...

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 

、スタックトレースの一番上にあると私は、このコード行でそれをすべての始まりを期待しています。

  1. Getリソースは、アプリケーションのクラスパス上のリソースからURLを生成するためのものであり、ファイルには必要ないし有用でもありません。
  2. この場合、ファイルにアクセスしようとすると、FileオブジェクトまたはStringのいずれかを使用できます。これは、ファイルシステム上のファイルへのパスを表します。だから、に短縮することができます

    weaponImg = new ImageIcon(chooser.getSelectedFile().getAbsolutePath()); // use String 
    
  3. しかしに示唆したように、それはまた、無地Fileとしてロードすることができましたので、これも動作します:

    weaponImg = new ImageIcon(chooser.getSelectedFile()); // use File! 
    
+0

ありがとうございます。これは、私はアプリのアイコンを設定する方法です、私はちょうど私が貼り付けコピー何を知っていない馬鹿のようにそれを貼り付けコピー: 乾杯メート –

+0

* "これは私がアプリのアイコンを設定する方法です" *質問が出たら、なぜエンドユーザは( 'JFileChooser'を使って)アプリケーションのアイコンを選択していますか?アプリケーションのアイコンは通常1)変更されないと予想されます。 2)アプリケーションクラスが入ってくるJarで提供されています。3)**その場合**では、ファイルセレクタをダンプし、 'getResource(..) 'を使用して'埋め込みリソース 'を読み込みます。 –

+0

Andrewが選択する写真はアプリのアイコンではありませんが、アプリのアイコンをコピーしてこの目的のために使用していたコードをコピーしました –

関連する問題