Przekazanie referencji

0

Cześć, borykam się z pewnym problemem już cały wieczór i w końcu chyba nie dojdę jak to zrobić, są to moje można powiedzieć początki w Javie.. alee.. na początek podam może kod:

import java.util.*;
import java.util.concurrent.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class jGmailCreator extends JFrame {
    private static int WIDTH = 400;
    private static int HEIGHT = 300;

        JButton but = new JButton("Rozpocznij");
    ExecutorService executor = Executors.newSingleThreadExecutor();

    public jGmailCreator(){
    JLabel label = new JLabel("Etykieta");
    setLayout(new FlowLayout());
    add(label);
    add(but);

    but.addActionListener(new ActionListener() {
    public void actionPerformed(ActionEvent e) {
    TryConn tr = new TryConn();
    executor.execute(tr);
        }
    });

        }

    class TryConn implements Runnable {

    public void run() {
              try {

            System.getProperties().put("java.protocol.handler.pkgs", "HTTPClient");
                        URL adres = new URL("http://mail.google.com/mail/signup");

                        URLConnection polaczenie = adres.openConnection();

                        BufferedReader czytaj = new BufferedReader(new InputStreamReader(polaczenie.getInputStream()));

                        String linia;
            String kodhtml = "";
                        while ((linia = czytaj.readLine()) != null)

                        { kodhtml += linia; }

            String[] urlexplode = kodhtml.split("<A HREF=\"");
            urlexplode = urlexplode[1].split("\">here</A>");
            String nexturl = urlexplode[0].replace( "&amp;", "&" );

                        czytaj.close(); 

            System.getProperties().put("java.protocol.handler.pkgs", "HTTPClient");
                        URL adres2 = new URL(nexturl);

                        URLConnection polaczenie2 = adres2.openConnection();

                        BufferedReader czytaj2 = new BufferedReader(new InputStreamReader(polaczenie2.getInputStream()));

                        String linia2;
            kodhtml = "";
                        while ((linia2 = czytaj2.readLine()) != null)

                        { kodhtml += linia2 + "\n"; }

            urlexplode = kodhtml.split("<input type=\"hidden\" name=\"newaccounttoken\" id=\"newaccounttoken\"\n           value=\"");
            urlexplode = urlexplode[1].split("\" />");
            String token = urlexplode[0];

//label.setIcon(new ImageIcon(new URL("https://www.google.com/accounts/Captcha?ctoken="+token)));

            }
            catch (Exception ee)

                        {ee.printStackTrace();}
        }

    }

    public static void main(String[] args) {
    jGmailCreator frame = new jGmailCreator();
    frame.addWindowListener(new WindowAdapter(){
                    public void windowClosing(WindowEvent e) {System.exit(0);
                    }});
    frame.setSize(WIDTH, HEIGHT);
    frame.setVisible(true);
    }
}

Co chciałbym osiągnąć? Mam tu przycisk Rozpocznij.. do tej pory w troszkę innej formie kodu po jego naciśnięciu program zamierał i wykonywał zadania (w tym przypadku połączenie z serwerem) trwało to kilka sekund, button wyglądał na cały czas nacisnięty, generalnie program jakby zwiechy dostawał na czas wykonania zadania, znalazłem w książce TIJ taki temat dotyczący "Zadań długotrwałych", chciałem to wykorzystać.. no i jest to już uwzględnione w powyższym kodzie, lecz mam problem z wyświetleniem rezultatu tego połączenia. Największy kłopot sprawia mi ta w tej chwili zakomentowana linijka bo przez nią krzyczy kompilator, chciałbym wyświetlić w tym labelu obrazek, lecz jak przekazać referencję tego labela (JLabel label) do metody "run".. bądź np, zwrócić choćby przez tą metodę zmienną typu string z kodem tokena(zmienna token).. nie mam pojęcia jak to zrobić, próbowałem kilka metod, ale niestety jestem początkujący w javie i nie mogę sobie z tym poradzić..
Prosiłbym o pomoc :)

0

Po co chcesz przekazywać referencję do labelki? Nie łatwiej jest w klasie TryConn stworzyć labelke jako pole i do TryConn przekazywać w konstruktorze referencję do tego pola?


class TryConn implements Runnable {
 private JLabel label;
 public TryConn(JLabel label){
    this.label = label
  }
0

to działa ! wielkie dzięki :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0