2016-07-27 1 views
0

리스너 내부에서 try/catch 블록에 대한 질문이 있습니다. 나는 JTextArea의 텍스트를 저장하는 경로를 제공하는 JDialog를 구현하려고 시도했다. 내 코드에서는 파일을 try로 저장하고 catch 부분의 메시지도 있습니다. 잘못된 경로를 삽입하면 내 캐치 만 캡처 (메시지 제공)하도록 변경해야합니까?(Java) try 및 try를 사용하여 actionlistener를 사용하는 방법?

import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.swing.*; 

public class MyFrame extends JFrame{ 
    public MyFrame() { 
     super("SaveText"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     Container c = getContentPane(); 
     c.setLayout(new BorderLayout()); 
     c.setPreferredSize(new Dimension(300, 400)); 

     final JTextField tFileName = new JTextField(); 
     final JTextArea tContent = new JTextArea(); 
     JButton bSave = new JButton("Save to File"); 
     JButton bReset = new JButton("Reset Content"); 

     JPanel pFile = new JPanel(); 
     pFile.setLayout(new GridLayout(2, 2)); 
     pFile.add(new JLabel("Content:")); 
     c.add(pFile, BorderLayout.NORTH); 
     JPanel pForm = new JPanel(); 
     pForm.setLayout(new GridLayout(1, 1)); 
     pForm.add(tContent); 
     c.add(pForm, BorderLayout.CENTER); 
     JPanel pButtons = new JPanel(); 
     pButtons.setLayout(new GridLayout(1, 2)); 
     pButtons.add(bSave); 
     pButtons.add(bReset); 
     c.add(pButtons, BorderLayout.SOUTH); 

     bSave.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
        try { 
         JDialog dialog = new JDialog(); 
         dialog.setTitle("Path"); 
         JButton button= new JButton("Close"); 
         dialog.add(tFileName); 
         dialog.add(button); 
         dialog.setSize(300, 100); 
         dialog.setLayout(new GridLayout(1,1)); 
         dialog.setVisible(true); 
         tContent.write(new FileWriter(tFileName.getText())); 
         button.addActionListener(new ActionListener() { 
         public void actionPerformed(ActionEvent e) { 
          dialog.dispose(); 
          } 
         }); 
         } catch (IOException ex) { 
         System.out.println("Not possible to save the file     "); 
        } 
      } 
     }); 
     pack(); 
     setVisible(true); 
    } 

    public static void main(String[] args) { 
     MyFrame test=new MyFrame(); 
    } 

} 
+0

당신이 무엇을 의미합니까 : 내 캐치는 캡처 있도록 변경할 필요가있는 무엇 (메시지를 제공합니다) 잘못된 경로를 삽입 했습니까? – ifly6

+0

이 시점에서 올바른 경로 또는 잘못된 경로를 지정하면 코드가 작동합니다. 올바른 경로를 통해 파일을 저장하지만 캐치가 메시지를 반환합니다 ("파일을 저장할 수 없음"). 잘못된 경로로 메시지를 반환하십시오. Try 부분이 작동 할 때 무엇이 ​​잘못 되었나요? 왜 catch 메시지도 반환합니까? 이 코드 부분에서 내가 뭘 잘못 했니? – Babi

+0

나는 옳은 길을 따라 파일을 저장하지만 캐치가 메시지를 반환하는지 또는 캐치 메시지를 반환하는 이유를 이해하지 못합니다. – ifly6

답변

-1

당신은 당신의 저장과 옳은 일을하고 있지 않습니다. 기존 파일이 아닌 파일에 내용을 쓰고 있습니다. 먼저 경로를 얻은 다음 해당 경로의 파일이 있는지 확인한 다음 파일을 만든 다음 마지막으로 파일에 내용을 씁니다. bSave.addActionListener을 수정하여 실제로 파일을 저장해야하는 저장 버튼을 포함 시켰습니다.

두 가지, a) 파일에 쓰기 위해 버퍼링 된 작성자를 사용해야합니다. b) 쓰기 후에 버퍼 작성기를 닫습니다. c) 대화가 최종해야합니다. 위의 변화와

bSave.addActionListener(new ActionListener() { 

      public void actionPerformed(ActionEvent e) { 
        try 
        { 
         final JDialog dialog = new JDialog(); 
         dialog.setTitle("Path"); 
         JButton sbutton= new JButton("Save"); 
         final JTextField tFileName = new JTextField(); 
         JButton cbutton = new JButton("Close"); 
         dialog.add(tFileName); 
         dialog.add(sbutton); 
         dialog.add(cbutton); 
         dialog.setSize(300, 100); 
         dialog.setLayout(new GridLayout(1,1)); 
         dialog.setVisible(true); 

         sbutton.addActionListener(new ActionListener() 
         { 
         public void actionPerformed(ActionEvent e) 
         { 
          File file = new File(tFileName.getText()); 
          if(!file.exists()) 
          { 
           try { 

           BufferedWriter writer = new BufferedWriter(new FileWriter(file)); 
           writer.write(tContent.getText()); 
           writer.close(); 
           } catch (IOException e1) { 
           // TODO Auto-generated catch block 
            System.out.println("Not possible to save the file because : " + "\n" + e1.getMessage()); 
           } 

          } 

         } 
         }); 

         cbutton.addActionListener(new ActionListener() 
         { 

         @Override 
         public void actionPerformed(ActionEvent arg0) 
         { 
          dialog.dispose(); 

         } 

         }); 
        } 
        catch (Exception ex) 
        { 
         ex.printStackTrace(); 
        } 
      } 
     }); 

, 같은 새로운 저장 대화 상자가 보일 것 :

enter image description here

+1

'file.createNewFile();'는 여기에 중복되거나 악화되었습니다. '새로운 FileWriter (file)'은 다음 줄에서 똑같은 일을합니다. 이제는'createNewFile()'로 생성 한 파일을 삭제할 것입니다. 무의미한 코드를 작성하지 마십시오. – EJP

+0

@EJP 데모 용이었습니다. 하지만 그 라인을 없애고 있습니다, 고마워요. – SomeDude

+0

이 경우 두 개의 catch 블록을 사용해야합니다. 파일을 쓰거나 저장하려고 할 때 항상 그렇습니까? – Babi

관련 문제