음 제가하려고하는게
버튼 누르면 액션리스너로 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;
}
댓글 0