【发布时间】:2018-05-03 00:42:09
【问题描述】:
我想知道为什么我在这个 gui 群聊中的发送按钮没有将我想要的消息打印到预期的文本区域,一切都编译并且没有错误,所以我有点不知所措,任何帮助都会赞赏。这是我在这里的第一篇文章,所以请原谅任何格式错误。我在下面附上了我的代码,感谢您的任何帮助,谢谢!
package ChatGUI;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class preDisplay extends Thread{
String username;
public void run() {
JFrame preFrame = new JFrame();
JButton enterChat = new JButton("Enter Chat");
JTextField chooseUserName = new JTextField("Enter desired username");
preFrame.add(chooseUserName, BorderLayout.CENTER);
chooseUserName.setBounds(15,20,250,50);
enterChat.setBounds(80,80,120,40);
preFrame.add(enterChat);
preFrame.setSize(300,200);
preFrame.setLayout(null);
preFrame.setVisible(true);
enterChat.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
username = chooseUserName.getText();
preFrame.setVisible(false);
}
});
}
}
package ChatGUI;
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class SendMessageUI extends Thread{
public void run() {
JFrame frame = new JFrame();//create new frame
JButton sendButton = new JButton("send");
JTextField textField = new JTextField();
frame.add(textField, BorderLayout.CENTER);
textField.setBounds(15,20,250,50);
DisplayMessages display = new DisplayMessages();
preDisplay pre_disp = new preDisplay();
sendButton.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent ae)
{
display.textArea.append(pre_disp.username + ": " + " " + textField.getText() + '\n');
}
});
sendButton.setBounds(100,80,80,40);//x axis, y axis, width, height
frame.add(sendButton);//adding button in JFrame
frame.setSize(300,200);//300 width and 200 height
frame.setLayout(null);//using no layout managers
frame.setVisible(true);//show frame
}
}
package ChatGUI;
public class DisplayMessages extends Thread{
JTextArea textArea = new JTextArea();
public void run(){
JFrame frame2 = new JFrame();//create new frame
frame2.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//set behavior when closed
frame2.setSize(400,300);//400 width and 300 height
frame2.setLayout(null);//using no layout managers
frame2.setLocationRelativeTo(null);
frame2.setVisible(true);//show frame
textArea.setBounds(15,20,350,220);
textArea.setEditable(false);
frame2.add(textArea);
}
}
package ChatGUI;
public class Main {
public static void main(String[] args) {
Thread t1 = new Thread(new preDisplay());
Thread t2 = new Thread(new SendMessageUI());
Thread t3 = new Thread(new DisplayMessages());
t1.start();
t2.start();
t3.start();
}
}
【问题讨论】:
-
????拜托,拜托,请阅读Concurrency in Swing - Swing 是 NOT 线程安全的,您不应该从外部修改 UI 的任何方面事件调度线程的上下文。您还可以通过对“模型-视图-控制器”之类的东西进行一些研究来帮自己一个大忙
-
好的,谢谢,我会的
标签: java multithreading user-interface