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( "&", "&" );
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 :)