TextArea dodawanie linii

0

Utworzyłem okienko w którym mam jTextArea. Klasa nazywa się env. Stworzyłem drugą klasę, która otrzymuje komunikaty od innych aplikacji (działa) i chciałbym żeby w momencie nadejścia komunikatu jego treść była dopisywana do jTextArea w klasie env. Jak najprościej to zrobić?

0

Ja się tam na Javie nie znam, ale jakieś iweny chyba musisz mieć, albo action listenery:) coś koło tego, tak bym to widział

0

jeżeli jest to możliwe to możesz stworzyć String'a statycznego do którego będziesz wpisywał te worzyć dane. Możesz sttakże metodę statyczną która będzie zapisywała dane do tego stringa. Dzięki słowu static możesz użyć metody z tej klasy(albo naszego pola statycznego) nie tworząc obiektu tej klasy.

czyli np. mając :

class Str {
        static String a = "imię";
        static String make(){
            return a+ " nazwisko";
        }
}
 

w innej klasie możesz zrobić Str.make() i wszystko będzie ok :)

Pozdr. :)

0

fragment mojego kodu:

 class AlarmHandler implements Runnable {
private Socket socket;
 
public AlarmHandler(Socket socket) {
this.socket = socket;
 
Thread t = new Thread(this);
t.start();
}
 
public void run() { 
try
{
//
// Read a message sent by client application
//
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
String message = null;
            try {
                message = (String) ois.readObject().toString();
            } catch (ClassNotFoundException ex) {
                Logger.getLogger(ConnectionHandler.class.getName()).log(Level.SEVERE, null, ex);
            }
 System.out.println(message);
            
ois.close();

socket.close();
 
} catch (IOException e) {
e.printStackTrace();
} 
}
}

W klasie env mam jTextArea do którego chce dopisać zawartość zmiennej message

0

Do konstruktora

public AlarmHandler(Socket socket,env ref)

przekaż również referencję do obiektu klasy env. Potem wywołuj ref.jTextArea.append("\n"++message); (lub ref.getJTextArea().append("\n"++message); jeżeli pole jTextArea jest private).

0

Następny kawałek kodu - trochę to zagmatwane:

 public class AlarmListener extends Thread{
private ServerSocket server;
private int port = 8080;

public void run() {
try {
server = new ServerSocket(port);
handleConnection();
} catch (IOException e) {
}
} 
 
public void handleConnection() { 
while (true) {
try {
Socket socket = server.accept();

new AlarmHandler(socket);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}

Natomiast w main:

        Env en = new Env();
        en.show();
  
        Listener ls = new Listener();
        ls.start();
  
        AlarmListener al = new AlarmListener();
        al.start(); 
0

Nie widzę byś w konstruktorze klasy AlarmHandler przekazywał referencję do klasy Env. Nie możesz pisać, że nie zadziałało, bo nie sprawdziłeś.

new AlarmHandler(socket);
} catch (IOException e) {
e.printStackTrace();
}

Schemat winien być taki:

//w main:
        Env en = new Env();
        en.show();
 
        Listener ls = new Listener();
        ls.start();
 
        AlarmListener al = new AlarmListener(en);
        al.start();
//w klasie AlarmListener
public class AlarmListener extends Thread{
    private ServerSocket server;
    private int port = 8080;
    private Env env;
    public AlarmListener(Env env)
    {
        super();
        this.env=env;
    }
    public void run() {
    try {
    server = new ServerSocket(port);
    handleConnection();
    } catch (IOException e) {
    }
    }

    public void handleConnection() {
    while (true) {
    try {
    Socket socket = server.accept();

    new AlarmHandler(socket,env);
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    }
0

Dzięki wielkie, skorzystałem z twojego schematu i zadziałało. Wybacz ale nie pomyślałem żeby umieścić ten kod który mi nie zadziałał - umieściłem czysty, bez referencji. Jeszcze raz wielkie dzięki :)

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