我的部分功能看起来像这样

jLabel2.setBackground(Color.YELLOW);
jLabel2.setText("Status : Idle");

boolean ok=cpu21.RestartSSH();

if(ok){
    jLabel2.setBackground(Color.GREEN);
    jLabel2.setText("Status : Run");
}

在我输入功能标签之前,绿色和运行是标签,但是当我进入功能标签时,它不会将颜色变成黄色(功能RestartSSH执行5-6秒,但是在此期间标签不会改变颜色并捕获)。我在绘画中犯错误的地方?

最佳答案

  • 使JLabel不透明,以便设置其背景色。
  • 在单独的线程中执行RestartSSH,否则您的GUI无法响应事件。

  • 例子:
    final JLabel jLabel2 = new JLabel("HELLO");
    jLabel2.setOpaque(true);
    jLabel2.setBackground(Color.YELLOW);
    jLabel2.setText("Status : Idle");
    
    //perform SSH in a separate thread
    Thread sshThread = new Thread(){
        public void run(){
            boolean ok=cpu21.RestartSSH();
            if(ok){
               //update the GUI in the event dispatch thread
               SwingUtilities.invokeLater(new Runnable() {
                   public void run() {
                       jLabel2.setBackground(Color.GREEN);
                       jLabel2.setText("Status : Run");
                   }
               });
            }
        }
    };
    sshThread.start();
    

    (更新:添加了对SwingUtilities.invokeLater的调用)

    09-28 09:11