음 제가하려고하는게


버튼 누르면 액션리스너로 selectPicture라는 메서드 실행시키구 이제 selectPicture메서드에있는 JFilechooser 나오면서 사진 선택하면


openFile이라는 메서드(메서드라고 하는게 맞나요? 용어에 약해서..) 에서 선택한 사진파일의 절대경로를 getCanonicalPath 써서 변수로 저장해서


그 절대경로 이용해서 ImageIcon, JLabel 이용해서 사진 띄우는거거든요


근데 getCanonicalPath()쓰면 저장되는 절대경로가 C:\ 같이 역슬래시로 저장되잖아요


그래서 ImageIcon에서는 경로에 / 가 쓰이니까 


replaceAll("\\\\", "/"); 이거가지고 바꾸는거를 openFile 메서드에서 해줬거든요


근데 문제가 발생하는게 저 /로 바뀐 경로가 openFIle메서드에서 지정이되는건데


openFile 메서드가 나중에 실행되니까 메인메서드(static main말구 그 Label같은거 넣어주는데요...)에서는


그 변수 쓰니까 null값으로 뜨더라고요..


그래서 빡쳐서 메인메서드에서 getCanonicalPath()하니까 이건되는데 또 이상한게


메인메서드에서는 replaceAll이 안되더라고요


설명을 거지같이해놔서 이해하기 힘드실수도있는데 이럴경우에 어떻게 해야하는지좀 알려주세요 형님들 ㅠㅜㅠㅜㅠㅜ




-----------------------------------------


메인메서드


itemInfo = new ImageIcon(picAddrC);

itemPic = new JLabel(itemInfo);


-----------------------------------------



public void selectPicture(){

JFileChooser chosPic=new JFileChooser();

chosPic.setDialogTitle("사진 올리기");

int returnVal=chosPic.showOpenDialog(this);

  if(returnVal !=JFileChooser.APPROVE_OPTION)//cancel 버튼이 눌려지면 취소

   return;

   File f=chosPic.getSelectedFile();//대화상자에서 선택된 파일객체 인스턴스를 구한다

   if(!f.exists())

   {//파일이 존재하지 않으면 에러 메세지를 띄운후 취소

     JOptionPane.showMessageDialog(this,file.getName()+" 파일을 찾을 수 없습니다.",

      "파일 열기 에러",JOptionPane.ERROR_MESSAGE);

      return;

   }

  openFile(f);

  

}

public void openFile(File file){

try {

picAddr = file.getCanonicalPath();

picAddrC = picAddr.replaceAll("\\\\", "/");

} catch (IOException e1) {

e1.printStackTrace();

}

this.file=file;

}