2013-03-27 1 views
0

폴더에서 arraylist 개의 아이콘 이미지를 추출하려고하는데 계속 NullPointerException이 발생합니다. 이미 작은 버전은 추출 할 수 있지만 너무 작습니다. 나가 얻는 것을 시도하고있는 아이콘은 일정한 치수가 재진 아이콘이다. filePaths에는 아이콘 위치 목록이 있습니다. iconBIG.add(...)NullPointerException 오류가 가리키는 곳입니다.여전히 응용 프로그램 아이콘 추출 중

// Global 
private ArrayList<Icon> iconBIG = new ArrayList<Icon>(); 

// Within extractIcon()... 
for (String target : filePaths) 
    { 
     try 
     { 
      ShellFolder shell = ShellFolder.getShellFolder(new File(target)); 
      iconBIG.add(new ImageIcon(shell.getIcon(true)));  
     } 
     catch (FileNotFoundException e) 
     { 
      e.printStackTrace(); 
     } 
    } 

편집 :가 이미의 ShellFolder를 사용하는 전체 권한이 있습니다.

UPDATE : 그것은 내가

getShellFolder(new File(C:/foo/bar.lnk)

getShellFolder(new File(target)

을 변경하는 경우, (응용 프로그램 만의 전체 경로를 보유하고있는) new File(target)을 말한다

코드 작품 . 나는 이미 모두 \을 '/'로 바꾸기 위해 미리 생각해 봤지만, 왜 아직도 같은 오류가 발생하는지 이해하지 못합니다.

+0

이 코드 블록 이전에 초기화 되었습니까? – Abubakkar

+0

@Abu 예. 전세계입니다 – SpicyWeenie

+0

ShellFolder 란 무엇입니까? 그것은 시작 카드 JDK의 일부가 아닙니다 (내가 볼 수있는 한) – MadProgrammer

답변

0

이 비공개 패키지의 실행을 허용 한 경우, 정상적으로 작동합니다. 다음은 JDK 6에서 작동하는 예제입니다.

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.FileNotFoundException; 
import javax.swing.*; 
import sun.awt.shell.ShellFolder; 

public class ShowShellIcon { 
    private static void createAndShowUI() { 
     final JFrame frame = new JFrame("Load Image"); 
     frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 

     JButton loadButton = new JButton("Display Image"); 
     loadButton.addActionListener(new ActionListener() { 
      @Override 
      public void actionPerformed(ActionEvent e) { 
       JFileChooser fc = new JFileChooser(
         System.getProperty("user.home")); 
       if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION){ 
        try { 
         ShellFolder shell = ShellFolder.getShellFolder(fc 
           .getSelectedFile()); 
         JOptionPane.showMessageDialog(null, 
           new ImageIcon(shell.getIcon(true))); 
        } catch (FileNotFoundException ex) { 
         ex.printStackTrace(); 
        } 
       } 
      } 
     }); 

     frame.add(loadButton); 
     frame.pack(); 
     frame.setLocationByPlatform(true); 
     frame.setVisible(true); 
    } 

    public static void main(String[] args) { 
     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        UIManager.setLookAndFeel(
          UIManager.getSystemLookAndFeelClassName()); 
       } catch (Exception ex) { 
        ex.printStackTrace(); 
       } 
       createAndShowUI(); 
      } 
     }); 
    } 
} 
+0

이 문제는 폴더와 폴더가 아닌 폴더 만 표시한다는 것입니다. – SpicyWeenie

+0

문제가 아니므로 폴더 만 필터링 했으므로 그 줄을 제거했습니다. - fc.setFileSelectionMode (JFileChooser.DIRECTORIES_ONLY);. 이제 파일을 보여줍니다. 업데이트 된 코드를 참조하십시오. – tenorsax

관련 문제