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

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 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多