大家帮忙看一下,为什么输出错误路径后,弹出dialog对话框,对话框关不掉呢?package cn.test; import java.awt.Button;
 import java.awt.Dialog;
 import java.awt.FlowLayout;
 import java.awt.Frame;
 import java.awt.Label;
 import java.awt.TextArea;
 import java.awt.TextField;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.awt.event.KeyAdapter;
 import java.awt.event.KeyEvent;
 import java.awt.event.WindowAdapter;
 import java.awt.event.WindowEvent;
 import java.io.File; // 为什么事件写在showDialog()方法的
//else里面去点那个提示窗体的按钮和关闭按钮会没有效果,
//而这两个事件丢在myEvent() 这个方法里就有效果public class LianXiDemo {         /**
          * @param args
          */
         // 构造函数
        public LianXiDemo() {
                 init();
         }         private Frame fr;
         private Button b;
         private TextField t;
         private TextArea ta;
         private Dialog d = new Dialog(fr, "提示框", true);
         private Button bok = new Button("确定");         // 初始化图形界面
        public void init() {
                 // 初始化窗体
                fr = new Frame("我的图形化界面");
                 // 设置窗体坐标,宽高
                fr.setBounds(200, 300, 500, 400);
                 // 设置布局样式
                fr.setLayout(new FlowLayout());
                 t = new TextField(30);
                 fr.add(t);
                 b = new Button("转到");
                 fr.add(b);
                 ta = new TextArea(10, 50);
                 fr.add(ta);
                 // 设置窗体可见性
                fr.setVisible(true);
                 // 加載窗體事件
                myEvent();
               
           
         }         // 响应的对应事件
        private void myEvent() {
                 fr.addWindowListener(new WindowAdapter() {
                         // 窗体关闭按钮响应事件
                        public void windowClosing(WindowEvent e) {
                                 System.exit(0);
                         }
                 });
                 //单行文本按enter响应事件
                t.addKeyListener(new KeyAdapter(){
                         public void keyPressed(KeyEvent e){
                                 if(e.getKeyCode()==e.VK_ENTER){
                                         showDialog();
                                 }
                         }
                 });
                 // 点击转到按钮响应事件
                b.addActionListener(new ActionListener() {
                         public void actionPerformed(ActionEvent e) {
                                 showDialog();
                         }                 });
         }
         //触发事件弹出提示框共用方法
        private void showDialog(){
                 ta.setText("");
                 String name = t.getText();
                 File f = new File(name);
                 if (f.exists()&& f.isDirectory()) {
                         for (String str : f.list()) {
                                 ta.append(str + "\r\n");
                         }
                 } else {
                         // 路径不存在,弹出提示框
                        d = new Dialog(fr, "提示框", true);
                         Label la = new Label();
                         d.setBounds(200, 300, 200, 100);
                         d.setLayout(new FlowLayout());
                         la.setText(null);
                         la.setText("您好,你填写的路径:" + name + "不存在,请重写填写");
                         d.add(la);
                         d.add(bok);
                         d.setVisible(true);
                         
                         /**   为什么我把这两个事件写在else里面去点那个提示窗体的按钮和关闭按钮会没有效果,而这两个事件丢在myEvent() 这个方法里就有效果 */
                   
                         // 点击模式窗口确定按钮响应事件
                        bok.addActionListener(new ActionListener() {
                                 public void actionPerformed(ActionEvent e) {
                                         d.setVisible(false);
                                 }
                         });
                         // 点击模式窗口关闭按钮响应事件
                        d.addWindowListener(new WindowAdapter(){
                                 public void windowClosing(WindowEvent e){
                                         d.setVisible(false);
                                 }
                         });
                        
                 }
         }
                  public static void main(String[] args) {
                 // TODO Auto-generated method stub
                 new LianXiDemo();
         } }

解决方案 »

  1.   


    //不应该是window事件把,window是主窗体关闭时间,你给dialog添加上肯定就管不了了。
    d.addWindowListener(new WindowAdapter(){
         public void windowClosing(WindowEvent e){
               d.setVisible(false);
         }
    });
      

  2.   


    这个是用来监听dialog对话框的窗体。
    而且,我试了如果将d.setVisible(true);放在dialog的两个事件监听后就可以关闭了。。求解释呀
      

  3.   

    监听不对吧  setvisible(false)好像不是关闭对话框吧 也是新手,求大神赐教啊
      

  4.   

    这句是将dialog对话框设置为不可见,其实如果程序不结束,这个对话框是一直存在的。
      

  5.   

    楼主应该在讲按钮添加到dialog之前,设置时间监听即d = new Dialog(fr, "提示框", true);
                   
                            Label la = new Label();
                            d.setBounds(200, 300, 200, 100);
                            d.setLayout(new FlowLayout());
                            la.setText(null);
                            la.setText("您好,你填写的路径:" + name + "不存在,请重写填写");
                            // 点击模式窗口确定按钮响应事件
                            bok.addActionListener(new ActionListener() {
                                        @Override
                                     public void actionPerformed(ActionEvent e) {
                                         System.out.println("hello");
                                         //d.dispose();
                                            d.setVisible(false);
                                    }
                            });
                            // 点击模式窗口关闭按钮响应事件
                           d.addWindowListener(new WindowAdapter(){
                                    public void windowClosing(WindowEvent e){
                                            d.setVisible(false);
                                            //d.dispose();
                                    }
                            });
                           d.add(la);
                           d.add(bok);
                           d.setVisible(true);
      

  6.   

    将按钮添加到dialog上之前添加事件监听错别字原谅我啊