首页上一页 1  下一页尾页 1 条记录 1/1页
        关于java窗体中显示动态文本的问题
                 	
                        发表在Java图书答疑
                        2020-04-13                         悬赏:1 学分                        
                    		
                            《零基础学Java》第11章  Swing程序设计
悬赏:1 学分                        
                    		
                            《零基础学Java》第11章  Swing程序设计                                                	
                        
                        
                    
                     悬赏:1 学分                        
                    		
                            《零基础学Java》第11章  Swing程序设计
悬赏:1 学分                        
                    		
                            《零基础学Java》第11章  Swing程序设计                                                	
                        
                        
                    
                    	是否精华
                    	是
                    	否
                    
                    
                    
                            版块置顶:
                            是
                            否
                        
                    import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
public class Test extends JFrame {
  public Test() {
    setBounds(400, 200, 200, 150);// 设置窗体大小及位置
    setDefaultCloseOperation(EXIT_ON_CLOSE);// 关闭窗体退出游戏
    setLayout(null);// 设置绝对布局
    // 标签
    JLabel test = new JLabel("初始值");
    test.setBounds(50, 20, 100, 30);
    add(test);
    // 开始按钮
    JButton start = new JButton("开始");
    start.setBounds(40, 60, 70, 30);
    add(start);
    // 为开始按钮添加鼠标点击动作监听事件
    start.addActionListener(new ActionListener() {
      @Override
      public void actionPerformed(ActionEvent e) {
	new Thread() {
	  public void run() {
	    Random ran = new Random();
	    for (int i = 1; i < 30; i++) {// 执行30次循环
	      test.setText(ran.nextInt(30) + 1 + "");// 更换test文本内容点数
	      try {
		Thread.sleep(50);// 线程暂停50毫秒
	      } catch (InterruptedException e) {
		e.printStackTrace();
	      }
	    }
	  }
        }.start();
      }
    });
  }
  public static void main(String[] args) {
    new Test().setVisible(true);// 新建窗体并使窗体可见
  }
}以上代码,实现在窗体中点击开始按钮后,test标签框动态改变30次随机数的文本内容,运行后没有问题,监听事件中用的是多线程方法。
现在的问题是,如果把监听事件中的多线程方法去掉,部分代码改成:
	@Override
	public void actionPerformed(ActionEvent e) {
		Random ran = new Random();
		for (int i = 1; i < 30; i++) {// 执行30次循环
			test.setText(ran.nextInt(30) + 1 + "");// 更换test文本内容点数
			try {
				Thread.sleep(50);// 线程暂停50毫秒
			} catch (InterruptedException e1) {
				e1.printStackTrace();
			}
		}
	}运行后再点击开始按钮,发现窗体面板会卡住一会,等监听事件中的方法运行结束后,面板才恢复正常,中途test标签内容并没有显示出变换的动作,最后标签内容为最后一个随机数值。
请问这是为什么,难道这里一定要用多线程才可以?或是还有其它办法解决?
于2020-04-14 08:26:12编辑
        
        	
        
        
    
 
	
                                                 VIP会员
VIP会员 购物车
购物车

 私信
                         私信 
                     
					 
					 
					 
					 
					 发表新帖
发表新帖 立即签到
立即签到 
        		  
        		 
         		 关注
关注
                  回复
 回复 支持(
                	支持( 反对(
                    反对( 
                    

 
               			  已解决
已解决 
                







 
                     
                     
					 
						 
						 
						 
						