Witam
Chce napisać aplikacje sieciową w swing. Tworze sobie nowy wątek do nasłuchu portu w którym mam nieskończoną pętle w której odczytuje dane ze strumienia.
Jak w tym wątku mogę dostać się do wątku głównego aby mieć dostęp do texfields?
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 10 lat
- Postów:142

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
A co wątki mają do tego? o_O o_O Przekaż do tego swojego obiektu (wątku) referencje do obiektów do których chcesz mieć dostęp.

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
To przekaż do okna które te texfieldsy agreguje? ;]

- Rejestracja:ponad 21 lat
- Ostatnio:około 3 lata
- Lokalizacja:Space: the final frontier
- Postów:26433
Wystarczy, chociaż ja bym spytał czy jest to najlepsze rozwiązanie ;)
- Rejestracja:ponad 13 lat
- Ostatnio:ponad 10 lat
- Postów:142
Dobrze, przedstawie kod:
Chce napisać aplikacje która jest klientem do serwera.Mam 3 klasy pierwsza "sender" która łączy się z serwerem i wysyła okresowo zapytanie do serwera, druga "Listener" która nasłuchuje na odpowiedź i ma aktualizować textfieldy, trzecia klasa to klasa od gui gdzie na zdarzenie odpalam timer oraz tworze wątek do nasłuchu. Jak uaktualnić textfieldy w klasie Listener, bo raczej bez sensu przekazywać referencje do wszystkich textfieldów w konstruktorze.
Kod:
public class Sender extends TimerTask
{
private final byte[] _buforOut=new byte[] { 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x01, 0x01, 0x00, 0x00, 0x00, 0x05 };
Socket _mySocket;
DataOutputStream _dataOutputStream;
OutputStream _outputStream;
public Sender (Socket _mySocket)
{
this._mySocket=_mySocket;
}
public void run()
{
try
{
if(!_mySocket.isConnected())
{
_mySocket.connect(new InetSocketAddress("192.168.1.200", 3000));
_outputStream=_mySocket.getOutputStream();
_dataOutputStream=new DataOutputStream(_outputStream);
}
_dataOutputStream.write(_buforOut, 0, _buforOut.length);
}
catch(IOException ex)
{
javax.swing.JOptionPane.showMessageDialog(null,ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
}
}
blic class Listener implements Runnable {
private final byte[] _buforIn=new byte[25];
Thread _thread;
InputStream _inputStream;
DataInputStream _dataInputStream;
Socket _mySocket;
Listener(Socket _mySocket)
{
this._mySocket=_mySocket;
_thread=new Thread(this,"Komunikacja");
_thread.start();
}
public void run()
{
while(true)
{
try
{
//x.setText(" ");
Thread.sleep(100);
if(_mySocket.isConnected())
{
_inputStream=_mySocket.getInputStream();
_dataInputStream=new DataInputStream(_inputStream);
}
else continue;
_dataInputStream.read(_buforIn, 0, _buforIn.length);
}
catch(Exception ex) {continue;}
/*
Tu ma być uaktualnienie textfieldów
*/
// x.setText(String.valueOf(_buforIn[15])+" "+String.valueOf(_buforIn[16])+" "+_buforIn[17]+" "+String.valueOf(_buforIn[18]));
for(byte i:_buforIn) i=0;
}
}
}
public class GUI extends javax.swing.JFrame {
Timer _timer;
Socket _mySocket;
// OutputStream _outputStream;
Sender _sender;
Listener _listener;
public GUI() {
initComponents();
_timer= new Timer();
_mySocket=new Socket();
_listener=new Listener(_mySocket);
_sender= new Sender(_mySocket);
}
Skorzystaj z EventBus: http://square.github.io/otto/

- Rejestracja:ponad 16 lat
- Ostatnio:około 2 miesiące
- Lokalizacja:Polska, Warszawa
- Postów:1058
Zarejestruj się i dołącz do największej społeczności programistów w Polsce.
Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.
Shalom