import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.*;
import java.net.*;
import java.awt.event.*;public class Ds
{
JFrame f=new JFrame("服务器端");
JButton b=new JButton("发送");
JTextArea jt=new JTextArea(12,21);
DatagramSocket socket=null;
DatagramPacket pa=null;
public Ds()
{
f.setBackground(Color.BLUE);
f.setSize(333, 333);
b.addActionListener(new Bu());
f.setLayout(new FlowLayout());
f.add(b);
f.add(jt);
f.setVisible(true);
}
class Bu implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
try
{
byte bb[]=new byte[1024];
socket=new DatagramSocket(4700);
pa=new DatagramPacket(bb,bb.length);
jt.setText("1111");
socket.receive(pa);
String str=new String(pa.getData());
jt.setText(str);
}
catch(Exception ee)
{
ee.getMessage();
}
}
} public static void main(String[] args)
{
Ds d=new Ds(); }}我按下发送按钮后就卡住了,按钮一直保持被按下时的那种暗暗的颜色,如图:
import javax.swing.JFrame;
import javax.swing.JTextArea;
import java.awt.*;
import java.net.*;
import java.awt.event.*;public class Ds
{
JFrame f=new JFrame("服务器端");
JButton b=new JButton("发送");
JTextArea jt=new JTextArea(12,21);
DatagramSocket socket=null;
DatagramPacket pa=null;
public Ds()
{
f.setBackground(Color.BLUE);
f.setSize(333, 333);
b.addActionListener(new Bu());
f.setLayout(new FlowLayout());
f.add(b);
f.add(jt);
f.setVisible(true);
}
class Bu implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
try
{
byte bb[]=new byte[1024];
socket=new DatagramSocket(4700);
pa=new DatagramPacket(bb,bb.length);
jt.setText("1111");
socket.receive(pa);
String str=new String(pa.getData());
jt.setText(str);
}
catch(Exception ee)
{
ee.getMessage();
}
}
} public static void main(String[] args)
{
Ds d=new Ds(); }}我按下发送按钮后就卡住了,按钮一直保持被按下时的那种暗暗的颜色,如图:
一句话:不要在GUI的事件派发线程中进行计算密集型或长时间等待等耗时的操作。将这些耗时操作代码全部包装成线程,然后在GUI的事件派发线程中启动这些线程就行了。