0

我正在製作一個應用程序,其中構造函數需要圖片的一個功能。該圖片顯然使用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安全不是讓我..

這有,無關的安全,儘管堆棧跟蹤提'安全'的一些線。真正的問題是在堆棧跟蹤的最頂端,..

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

,我希望一切都始於這行代碼..

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

這既是錯誤的,不必要的令人費解。

  1. 獲取資源是爲了從應用程序的類路徑上的資源生成URL,它既不需要也不用於文件。
  2. 所以在這種嘗試訪問文件的情況下,我們可以使用File對象或String表示文件系統上文件的路徑。因此,它可以縮短到:

    weaponImg = new ImageIcon(chooser.getSelectedFile().getAbsolutePath()); // use String 
    
  3. 但作爲暗示,它也可以加載一個簡單的File,所以這也將工作:

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

你真了不起,謝謝你。這是我如何設置應用程序的圖標,我只是複製粘貼它像一個白癡不知道我在複製粘貼:) 乾杯隊友 –

+0

*「這是我如何設置應用程序的圖標..」*問題就變成了,爲什麼最終用戶(使用'JFileChooser')爲應用程序選擇一個圖標。?!?應用程序圖標通常應該是不變的。 2)在Jar中提供了應用程序類。3)在**這種情況下**,我們將轉儲文件選擇器並使用'getResource(..)'加載'嵌入式資源'。 –

+0

安德魯要選擇的圖片不是應用程序的圖標,但是,我複製粘貼代碼,該圖標代表應用程序並正在使用它爲此目的 –

相關問題