Matrix1123 2017-04-21 11:47 采纳率: 100%
浏览 4799
已采纳

java在匿名内部类中如何访问外部的变量?

 package 线程优先级;
import java.awt.*;
import javax.swing.*;
public class MyThread extends JFrame {
    static int i=0; 
    private static Thread thread[]=new Thread[4];
    private static JProgressBar pb[]=new JProgressBar[4];
    public MyThread(String title)
     {
         super(title);
         Container container=this.getContentPane();
         container.setLayout(new GridLayout(4,1));
         for(int i=0;i<4;i++)
         {
             pb[i]=new JProgressBar();
             pb[i].setStringPainted(true);
         }
         while(i<4)
         {
             thread[i]=new Thread(new Runnable(){
                 public void run(){
                     int progress=0;
                     while(progress<=100)
                     {
                         try{
                             Thread.sleep(100);
                         }catch(Exception e)
                         {
                             e.printStackTrace();
                         }
                         pb[i].setValue(progress++);   //此处有问题
                     }   
                 }
             }
                     );
                 i++;
         }
           for(int i=0;i<4;i++)
               container.add(pb[i]);
           this.setSize(400,400);
           this.setVisible(true);
           this.setDefaultCloseOperation(EXIT_ON_CLOSE);
           thread[0].setPriority(5);
           thread[1].setPriority(5);
           thread[2].setPriority(4);
           thread[3].setPriority(3);
           i=0;
           while(i<4)
           {
               thread[i].start();
               i++;
           }
     }
           public  static void main(String[] args)
           {
               new MyThread("线程优先级");
           }
}

这段代码由于我在run()方法里设置进度条的数字时用了静态变量,导致在调用线程start()方法的时候里面的进度条只动了一条。如果不用静态变量的话我又不知道怎么在Runnable的匿名内部类中访问外部循环的i,有没有什么办法在匿名内部类中能够访问外部的参数,而且不是常量不是静态变量?

  • 写回答

2条回答 默认 最新

  • oyljerry 2017-04-21 11:50
    关注

    你把变量绑定到final,也可以在匿名类中访问。或者直接做参数传递进去

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳