2016-07-27 10 views
0

私は、リスナの内部でtry/catchブロックに関する質問をしています。私はJTextAreaのテキストを保存するためのパスを与えるJDialogを実装しようとしました。私のコードでは、tryでファイルを保存し、catch部分からのメッセージも持っています。間違ったパスを挿入した場合、キャッチするだけでキャプチャする(メッセージを与える)ように変更する必要はありますか?(Java)actionlistenerの中でtryとcatchを使う方法は?

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パートが動作するときに、何が間違っていなければならないのですか、なぜキャッチメッセージを返すのでしょうか?コードのこの部分で何が間違っていますか? – 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();'はここで重複しているか、悪化しています。 'new FileWriter(file)'は次の行で同じことを行います。これは 'createNewFile()'で作成したファイルを削除することになります。無意味なコードを書き込まないでください。 – EJP

+0

@EJPデモ用です。しかし、私はその行を削除しています、ありがとう。 – SomeDude

+0

この場合、私は2つのキャッチブロックを使用する必要があります。ファイルの書き込み/保存を試みるときはいつもそうですか? – Babi