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 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示
  • ¥15 arduino 步进电机
  • ¥20 程序进入HardFault_Handler