Java 请稍候对话框

Java 请稍候对话框,java,swing,Java,Swing,我在线程中显示对话框时遇到问题。这里的Sleep方法是我的代码,它不起作用 JButton btnNewButton = new JButton("New button"); btnNewButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent arg0) { JDialog loading = new LoadingDialog(); loading.set

我在线程中显示对话框时遇到问题。这里的Sleep方法是我的代码,它不起作用

JButton btnNewButton = new JButton("New button");
btnNewButton.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent arg0) {
    JDialog loading = new LoadingDialog();
    loading.setVisible(true);
    try {
      Thread.sleep(6000);
    } catch (Exception e) {
      e.printStackTrace();
    }
    loading.dispose();
  }
});


请帮助我解决此问题。

使用自定义对话框,您正在阻止主线程-请尝试此操作

btn.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent ae) {
    final JDialog loading = new LoadingDialog();
    loading.setVisible(true);
    btn.setEnabled(false);

    new Thread(new Runnable() {
      public void run() {
        try {
          Thread.sleep(6000);
        } catch (InterruptedException e) {
        }
        loading.dispose();
        btn.setEnabled(true);
      }
    }).start();
  }
});

你最好在这个案子中使用SwingWorkder。此类允许您创建在后台模式下运行的线程。它非常适合模态框架。

它不工作到底意味着什么?您会得到什么错误或异常?我注意到您在
new LoadingDialog()
之后缺少一个分号,但这可能只是一个输入错误。它没有显示加载对话框。它等待6秒,然后退出。此处缺少分号是输入错误。很抱歉。如果我用常规的
JDialog
代替
加载对话框运行它,它会正常工作。您是否在
加载对话框
中重写了类似
setVisable()
的内容?这对我也适用,但是如果我有自定义的JDialog,比如扩展JDialog,我应该如何继续。@pasupati Post
LoadingDialog.java
?公共类加载对话框扩展JDialog{public LoadingDialog(){Toolkit tk=Toolkit.getDefaultToolkit();维度screenSize=tk.getScreenSize();int screenHeight=screenSize.height;int screenWidth=screenSize.width;setBounds((screenWidth-400)/2,(screenHeight-200)/235080);getContentPane().setLayout(null);SetResizeable(false);SetUndercorated(true);JLabel lblPleaseWaitWhile=new JLabel(“启动服务时请稍候”);lblPleaseWaitWhile.setBounds(85,22,313,14);getContentPane().add(lblPleaseWaitWhile);setVisible(true);}@Pasupathi根据LoadingDialog类进行了更新。不要在EDT上下文之外更新UI组件。这实际上是SwingWorker的一个经典案例
btn.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent ae) {
    final JDialog loading = new LoadingDialog();
    loading.setVisible(true);
    btn.setEnabled(false);

    new Thread(new Runnable() {
      public void run() {
        try {
          Thread.sleep(6000);
        } catch (InterruptedException e) {
        }
        loading.dispose();
        btn.setEnabled(true);
      }
    }).start();
  }
});