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