Java - 具有动态文本的无模式等待对话框

时间:2015-05-18 14:49:05

标签: java multithreading swing

我需要创建一个包含以下要求的对话框(消息)框:

  1. 通过在显示的当前文本中定期添加1个点,它应该能够在可见期间更改文本。
  2. 避免阻止主进程的工作应该是无模式的。它只是用户正在处理作品的通知消息。
  3. 应该在过程开始时显示,在结束时消失。我不介意明确地说它,因为我不知道该任务需要提前多长时间。
  4. 对话框应多次显示,每次都有不同的基本文字。

    我试图像这样创建一个无模式对话框:

        try{
      String laf = UIManager.getSystemLookAndFeelClassName(); 
      UIManager.setLookAndFeel(laf); // tell the UIManager to change the look and feel
    }
    catch (Exception e)
    {
      System.out.println("Unable to change look and feel");
    }   
    
    m_optionPane = new JOptionPane(a_sText, JOptionPane.INFORMATION_MESSAGE, JOptionPane.DEFAULT_OPTION, null, new Object[]{}, null);
    
    
    m_dialog = new JDialog();
    m_dialog.setSize(200, 50);
    m_dialog.setTitle(a_sTitle);
    m_dialog.setModal(false);
    m_dialog.setContentPane(m_optionPane);
    m_dialog.setLocationRelativeTo(null);
    m_dialog.setAlwaysOnTop(true);
    m_dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);
    m_dialog.pack();
    
    
    public void showDialog(String a_sText, boolean a_bDynamic){
    
    if(a_bDynamic){
        m_runnable = new DynamicWait(m_optionPane, a_sText);
    
        m_thread = new Thread(m_runnable);
    
        m_thread.start();
    }else{
        m_optionPane.setMessage(a_sText);
    }
    
    m_dialog.setVisible(true);
    }
    
    public void hideDialog2(){
    
    if (m_thread != null){
    
        m_thread.interrupt();
    
        m_runnable = null;
        m_thread = null;
    }
    
    m_dialog.dispose();
    

    }

    然后使用线程不断添加点..

    public class DynamicWait implements Runnable {
    
    public DynamicWait(JOptionPane a_optionPane, String a_sText){
    
    Log4jWrapper.writeLog(LogLevelEnum.WARN, "DynamicWait - " + a_sText + " Thread ID " + Thread.currentThread().getId());
    
    m_optionPane = a_optionPane;
    m_sText = a_sText;
    }
    
    @Override
    public void run() {
    
    while(m_bRun){
    
        try {
            m_optionPane.setMessage(m_sText);
            Thread.sleep(1000);
            m_optionPane.setMessage(m_sText + ".");
            Thread.sleep(1000);
            m_optionPane.setMessage(m_sText + "..");
            Thread.sleep(1000);
            m_optionPane.setMessage(m_sText + "...");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
    
            Log4jWrapper.writeLog(LogLevelEnum.WARN, e.getMessage());
        }
    }
    

    }

    public void stopRun(){      m_bRun = false;     }

    嗯,总而言之,我无法得到正确的结果。

    我很感激你的建议。

    谢谢。

0 个答案:

没有答案