2015-11-02 3 views
2

Я ищу дни, чтобы помочь мне, но я ничего не нашел для этой проблемы, и я действительно не знаю, что делать.Looping in ArrayList не работает (метод Get())

Вот проблема ... Я пытаюсь получить url, который я добавил в этом ArrayList (urlPage) в позиции i внутри моего цикла, но у меня получилась эта ошибка компиляции: Локальная переменная i, определенная в охватывающей области, должна быть окончательной или фактически окончательно. Я много пробовал, но ничего не работает.

/* Create a loop starting with 0 and ending with 3 to add all the components into the panel */ 
     for (int i = 0; i < 3 ; i++) { 
      productIconLabel[i] = new JLabel(""); 
      productIconLabel[i].addMouseListener(new MouseAdapter() { 
       @Override 
       public void mousePressed(MouseEvent arg0) { 
        try { 
         Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + urlPage.get(i)); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      }); 

Код в цикле продолжается (там почему здесь нет конца кронштейн для), но это та часть, которая у меня возникают проблемы с. Это функция, когда я добавляю url в ArrayList.

/* Function to receive part of information sent from the form page */ 
    public void radioButtonResult(int productIndexNumber, String productImageAddress, String productName, double productPrice, String url) { 
     productIconLabel[productIndexNumber].setIcon(new ImageIcon(productImageAddress)); 
     productNameLabel[productIndexNumber].setText(productName); 
     productPriceLabel[productIndexNumber].setText(Double.toString(productPrice) + " €"); 
     urlPage.add(productIndexNumber, url); 
    } 

Единственная проблема - ошибка компиляции. Чтобы сделать некоторые тесты, я изменил i на 0, 1 и 2 и работал. Я ценю любую помощь.

+0

какая строка кода содержит ошибки? – AbtPst

+0

- это функция функции radioButtonResult для функции getRuntime(). Exec? – AbtPst

+0

Это одно: Runtime.getRuntime(). Exec ("rundll32 url.dll, FileProtocolHandler" + urlPage.get (i)) –

ответ

2

Вы находитесь в новом MouseAdapter(), поэтому он не знает переменную i. Различные возможности.

Используйте конечную переменную.

for (int i = 0; i < 3 ; i++) { 
      final int currentIter = i; 
      productIconLabel[i] = new JLabel(""); 
      productIconLabel[i].addMouseListener(new MouseAdapter() { 
       @Override 
       public void mousePressed(MouseEvent arg0) { 
        try { 
         Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + urlPage.get(currentIter)); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 

       } 
      }); 
+1

Решено, спасибо :) –

+0

Отлично! Рад, что мы сможем помочь –

2

i должно быть окончательным для того, чтобы получить доступ к его внутри метода анонимного внутреннего класса. Вы можете сделать что-то вроде этого:

for (int i = 0; i < 3 ; i++) { 
     final int fi = i; 
     productIconLabel[i] = new JLabel(""); 
     productIconLabel[i].addMouseListener(new MouseAdapter() { 
      @Override 
      public void mousePressed(MouseEvent arg0) { 
       try { 
        Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler " + urlPage.get(fi)); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

      } 
     }); 
     ..... 
+0

Решено, спасибо :) –

+0

@ElaineCristinaMeirelles отлично, удачи. – Titus

1

Вы косяк использовать локальную переменную i в анонимный внутренний класс. Потому что эти 2 области отличаются.