Привет, я пытаюсь понять EDT против Multithreading, надеясь, что кто-то может исправить меня, если это не имеет смысла.Понимание EDT и разделение объектов?
Сначала я поставил создание процесса графического интерфейса в отдельном потоке, который затем добавляется в EDT
public class Main
{
static ServerGui serverGui;
public static void main(String[] args) {
SwingUtilities.invokeLater(new Runnable() {
public void run() {
try{
serverGui = new ServerGui();
serverGui.frame.setVisible(true);
}
catch(Exception e)
{
e.printStackTrace(); }} });}}
В моей GUI я создал объект ServerDataHandler СЕ
public class ServerGui {
public ServerDataHandler sdh = new ServerDataHandler();
public JFrame frame;
public ServerGui() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frame = new JFrame();
frame.setType(Type.NORMAL);
frame.setBounds(100, 100, 800, 600); } }
Теперь из другой поток, я хочу работать с этим объектом sdh и использовать некоторые из методов , которые он имеет ... например sdh.writeToFile(); так что вот мои вопросы
Как я хочу использовать один и тот же объект, мне нужно сделать это, как будто я внизу ?.
Нужно ли мне синхронизировать класс ServerDataHandler, например, в моем случае метод записывается в файл? Я подозреваю, что я делаю
Когда мне нужно использовать 'invokeLater'? это то, что я изменяю в самом графическом интерфейсе?
Client
public class Client implements Runnable {
private Socket clientSocket;
public Client(Socket clientSocket) {
this.clientSocket = clientSocket;
@Override
public void run() {
Main.serverGui.sdh.writeToFile();} }