JFrame不会出现在其他窗口之上

时间:2012-12-31 12:00:50

标签: java multithreading swing

  

可能重复:
  JDialog Stops execution of parent JFrame

我必须使用JFrame并且它已经未修饰并且只有一个进度条的图像...但是当我想要发送请求到服务器时我希望它是显示进度条而它没有显示它而是我的窗口已加载....我已尝试过jDialog,但它正在停止执行我的代码..

这是我的代码

private void LoginBtnActionPerformed(java.awt.event.ActionEvent evt) {
    ProgressBar pb = new ProgressBar();
    pb.setVisible(true);
    List<BasicNameValuePair> postPairs = new ArrayList<BasicNameValuePair>();
    AsyncService asyncService = new AsyncService();

    postPairs.add(new BasicNameValuePair("PATH","authenticateUser.idoc"));
        postPairs.add(new BasicNameValuePair("user_email",email));
        postPairs.add(new BasicNameValuePair("user_password",password));


        JSONArray jArray = asyncService.sendRequest(postPairs);
        pb.setVisible(true);
}

除了gif动画图片和Label之外,我的进度条框架中没有任何内容... 编辑1  * /

  class WorkerProgressBar extends SwingWorker<Integer, Integer>
  {
    private JFrame pb = new JFrame();
    JDialog dialog = new JDialog();
     JPanel panel = new JPanel();
     JLabel label = new JLabel();
     public WorkerProgressBar(){
             panel = new JPanel();
                panel.setBackground(new Color(114,114,114));
                JLabel imageLabel = new JLabel(new ImageIcon(getClass().getResource("/icons/progress_bar.gif")));
                imageLabel.setBorder(BorderFactory.createLineBorder(Color.black));
                panel.add(imageLabel);
                dialog.getContentPane().add(panel,BorderLayout.CENTER);

                dialog.pack();
                dialog.setLocationRelativeTo(null);
     }
     protected Integer doInBackground() throws Exception
 {
        dialog.setVisible(true);
        return 0;
     }
     protected void done()
{
    try
    {
        dialog.setVisible(false);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}   

1 个答案:

答案 0 :(得分:4)

如果窗口要在另一个Swing顶级窗口之上,则应使用JDialog,但必须确保在将模式对话框设置为可见之前调用要运行的所有代码。关键是你应该在后台线程上运行长时间运行的任务,例如SwingWorker提供的任务。此网站上有 许多 示例,因为您的问题已在此处多次询问。