程序如下:import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Panel;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;import javax.swing.JButton;
import javax.swing.JLabel;
import java.awt.ComponentOrientation;
import java.awt.Insets;
import java.awt.Dimension;
import javax.swing.SwingConstants;
import javax.swing.JTextArea;
public class SocketS { private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="147,33"
private JPanel jContentPane = null;
private JPanel jPanel = null;
private Panel panel = null;
private JButton jButton = null;
private JButton jButton1 = null;
private JButton jButton2 = null;
private JLabel jLabel = null;
Object s1=new Object();
private JPanel jPanel1 = null;
private JTextArea jTextArea = null;
private JButton jButton3 = null;
private JFrame getJFrame() {
if (jFrame == null) {
jFrame = new JFrame();
jFrame.setSize(new java.awt.Dimension(330,314));
jFrame.setTitle("服务端");
jFrame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
jFrame.setBackground(new java.awt.Color(238,238,238));
jFrame.setResizable(false);
jFrame.setContentPane(getJContentPane());
jFrame.setVisible(true);
jFrame.addWindowListener(new java.awt.event.WindowAdapter() {   
public void windowOpened(java.awt.event.WindowEvent e) {    

}
public void windowClosing(java.awt.event.WindowEvent e) {
System.exit(0);
}
});
}
return jFrame;
} private JPanel getJContentPane() {
if (jContentPane == null) {
jContentPane = new JPanel();
jContentPane.setLayout(new BorderLayout());
jContentPane.setPreferredSize(new java.awt.Dimension(20,20));
jContentPane.setBackground(new java.awt.Color(119,2,2));
jContentPane.add(getPanel(), java.awt.BorderLayout.NORTH);
jContentPane.add(getJPanel(), java.awt.BorderLayout.CENTER);
jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
}
return jContentPane;
} private JPanel getJPanel() {
if (jPanel == null) {
jLabel = new JLabel();
jLabel.setText("");
jLabel.setPreferredSize(new java.awt.Dimension(320,180));
jLabel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
jLabel.setForeground(java.awt.Color.cyan);
jLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
jLabel.setAlignmentY(0.0F);
jLabel.setRequestFocusEnabled(false);
jLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
jLabel.setBackground(new java.awt.Color(153,51,0));
jPanel = new JPanel();
jPanel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
jPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
jPanel.setBackground(new java.awt.Color(153,51,0));
jPanel.setPreferredSize(new java.awt.Dimension(320,180));
jPanel.add(jLabel, null);
jLabel.setAutoscrolls(true);
jLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
jLabel.setBackground(new Color(255,255,255));
}
return jPanel;
} private Panel getPanel() {
if (panel == null) {
panel = new Panel();
panel.setPreferredSize(new java.awt.Dimension(10,36));
panel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
panel.setBackground(new java.awt.Color(153,51,0));
panel.add(getJButton(), null);
panel.add(getJButton1(), null);
panel.add(getJButton2(), null);
}
return panel;
} private JButton getJButton() {
if (jButton == null) {
jButton = new JButton();
jButton.setText("启动");
jButton.setToolTipText("启动服务");
jButton.setSelected(false);
jButton.setAlignmentY(0.2F);
jButton.setMargin(new java.awt.Insets(2,10,2,10));
jButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) 
{

ServerSocket server=null;
Socket socket=null;
if(server==null&&socket==null)
{ try
{
server=new ServerSocket(2006);
try
{
socket=server.accept();
}catch(Exception e1){System.out.print("asdsad");}

BufferedReader sin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter sout=new PrintWriter(socket.getOutputStream());
}catch(Exception e1){System.out.println("Error."+e1);}
}

}
});
}
return jButton;
} private JButton getJButton1() {
if (jButton1 == null) 
{
jButton1 = new JButton();
jButton1.setText("停止");
jButton1.setMargin(new java.awt.Insets(2,10,2,10));
jButton1.setVisible(true);
}
return jButton1;
} private JButton getJButton2() {
if (jButton2 == null) {
jButton2 = new JButton();
jButton2.setText("关闭");
jButton2.setPreferredSize(new java.awt.Dimension(60,28));
jButton2.setMargin(new java.awt.Insets(2,2,2,2));
jButton2.setAlignmentY(0.2F);
jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
//jButton2.addActionListener()
}
return jButton2;
}
/**
 * This method initializes jPanel1
 * 
 * @return javax.swing.JPanel
 */
private JPanel getJPanel1() {
if (jPanel1 == null) {
jPanel1 = new JPanel();
jPanel1.setPreferredSize(new java.awt.Dimension(250,60));
jPanel1.setBackground(new java.awt.Color(153,51,0));
jPanel1.add(getJTextArea(), null);
jPanel1.add(getJButton3(), null);
}
return jPanel1;
}/**
 * This method initializes jTextArea
 * 
 * @return javax.swing.JTextArea
 */
private JTextArea getJTextArea() {
if (jTextArea == null) {
jTextArea = new JTextArea();
jTextArea.setPreferredSize(new java.awt.Dimension(258,50));
jTextArea.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
}
return jTextArea;
}/**
 * This method initializes jButton3
 * 
 * @return javax.swing.JButton
 */
private JButton getJButton3() {
if (jButton3 == null) {
jButton3 = new JButton();
jButton3.setPreferredSize(new java.awt.Dimension(50,50));
jButton3.setMargin(new java.awt.Insets(2,2,2,2));
jButton3.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
jButton3.setText("发送");
}
return jButton3;
}public static void main(String args[])
{
SocketS s1=new SocketS();
s1.getJFrame();
}
}
一点启动按纽程序就死了,调了半天还是不在的问题出在哪,高手帮忙啊

解决方案 »

  1.   

    我没有仔细看你写的程序,但是如果你想点击“启动”来启动你的服务器的时候,应当用创建一个新的线程,如果不创建,当点击“启动”时,socket=server.accept(); 会占用这个过程,GUI没有办法运行,造成整个界面卡着。
      

  2.   

    整个网页我都没有搜到Thread的字样就肯定不对了.你要吧accept方法放到一个线程中去,然后我们再看能不能连上了.
      

  3.   

    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Panel;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.ServerSocket;
    import java.net.Socket;import javax.swing.JButton;
    import javax.swing.JLabel;
    import java.awt.ComponentOrientation;
    import java.awt.Insets;
    import java.awt.Dimension;
    import javax.swing.SwingConstants;
    import javax.swing.JTextArea;
    public class SocketS { private JFrame jFrame = null;  //  @jve:decl-index=0:visual-constraint="147,33"
    private JPanel jContentPane = null;
    private JPanel jPanel = null;
    private Panel panel = null;
    private JButton jButton = null;
    private JButton jButton1 = null;
    private JButton jButton2 = null;
    private JLabel jLabel = null;
    Object s1=new Object();
    private JPanel jPanel1 = null;
    private JTextArea jTextArea = null;
    private JButton jButton3 = null;
    private JFrame getJFrame() {
    if (jFrame == null) {
    jFrame = new JFrame();
    jFrame.setSize(new java.awt.Dimension(330,314));
    jFrame.setTitle("服务端");
    jFrame.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
    jFrame.setBackground(new java.awt.Color(238,238,238));
    jFrame.setResizable(false);
    jFrame.setContentPane(getJContentPane());
    jFrame.setVisible(true);
    jFrame.addWindowListener(new java.awt.event.WindowAdapter() {   
    public void windowOpened(java.awt.event.WindowEvent e) {    

    }
    public void windowClosing(java.awt.event.WindowEvent e) {
    System.exit(0);
    }
    });
    }
    return jFrame;
    } private JPanel getJContentPane() {
    if (jContentPane == null) {
    jContentPane = new JPanel();
    jContentPane.setLayout(new BorderLayout());
    jContentPane.setPreferredSize(new java.awt.Dimension(20,20));
    jContentPane.setBackground(new java.awt.Color(119,2,2));
    jContentPane.add(getPanel(), java.awt.BorderLayout.NORTH);
    jContentPane.add(getJPanel(), java.awt.BorderLayout.CENTER);
    jContentPane.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
    }
    return jContentPane;
    } private JPanel getJPanel() {
    if (jPanel == null) {
    jLabel = new JLabel();
    jLabel.setText("");
    jLabel.setPreferredSize(new java.awt.Dimension(320,180));
    jLabel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    jLabel.setForeground(java.awt.Color.cyan);
    jLabel.setVerticalAlignment(javax.swing.SwingConstants.TOP);
    jLabel.setAlignmentY(0.0F);
    jLabel.setRequestFocusEnabled(false);
    jLabel.setVerticalTextPosition(javax.swing.SwingConstants.TOP);
    jLabel.setBackground(new java.awt.Color(153,51,0));
    jPanel = new JPanel();
    jPanel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    jPanel.setBorder(javax.swing.BorderFactory.createEmptyBorder(0,0,0,0));
    jPanel.setBackground(new java.awt.Color(153,51,0));
    jPanel.setPreferredSize(new java.awt.Dimension(320,180));
    jPanel.add(jLabel, null);
    jLabel.setAutoscrolls(true);
    jLabel.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    jLabel.setBackground(new Color(255,255,255));
    }
    return jPanel;
    } private Panel getPanel() {
    if (panel == null) {
    panel = new Panel();
    panel.setPreferredSize(new java.awt.Dimension(10,36));
    panel.setComponentOrientation(java.awt.ComponentOrientation.LEFT_TO_RIGHT);
    panel.setBackground(new java.awt.Color(153,51,0));
    panel.add(getJButton(), null);
    panel.add(getJButton1(), null);
    panel.add(getJButton2(), null);
    }
    return panel;
    } private JButton getJButton() {
    if (jButton == null) {
    jButton = new JButton();
    jButton.setText("启动");
    jButton.setToolTipText("启动服务");
    jButton.setSelected(false);
    jButton.setAlignmentY(0.2F);
    jButton.setMargin(new java.awt.Insets(2,10,2,10));
    jButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) 
    {

    //ServerSocket server=null;
    //Socket socket=null;
    int num=0;
    try
    {
      ServerSocket serverSocket=new ServerSocket(2006);
    while(true)
    {
     Socket socket=serverSocket.accept();
    new ServerThread(socket,num).start();
    num++;
    }

    }catch(Exception e1){System.out.println("Error."+e1);}
    }
    });
    }
    return jButton;
    } private JButton getJButton1() {
    if (jButton1 == null) 
    {
    jButton1 = new JButton();
    jButton1.setText("停止");
    jButton1.setMargin(new java.awt.Insets(2,10,2,10));
    jButton1.setVisible(true);
    }
    return jButton1;
    } private JButton getJButton2() {
    if (jButton2 == null) {
    jButton2 = new JButton();
    jButton2.setText("关闭");
    jButton2.setPreferredSize(new java.awt.Dimension(60,28));
    jButton2.setMargin(new java.awt.Insets(2,2,2,2));
    jButton2.setAlignmentY(0.2F);
    jButton2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);
    //jButton2.addActionListener()
    }
    return jButton2;
    }
    /**
     * This method initializes jPanel1
     * 
     * @return javax.swing.JPanel
     */
    private JPanel getJPanel1() {
    if (jPanel1 == null) {
    jPanel1 = new JPanel();
    jPanel1.setPreferredSize(new java.awt.Dimension(250,60));
    jPanel1.setBackground(new java.awt.Color(153,51,0));
    jPanel1.add(getJTextArea(), null);
    jPanel1.add(getJButton3(), null);
    }
    return jPanel1;
    }/**
     * This method initializes jTextArea
     * 
     * @return javax.swing.JTextArea
     */
    private JTextArea getJTextArea() {
    if (jTextArea == null) {
    jTextArea = new JTextArea();
    jTextArea.setPreferredSize(new java.awt.Dimension(258,50));
    jTextArea.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.LOWERED));
    }
    return jTextArea;
    }/**
     * This method initializes jButton3
     * 
     * @return javax.swing.JButton
     */
    private JButton getJButton3() {
    if (jButton3 == null) {
    jButton3 = new JButton();
    jButton3.setPreferredSize(new java.awt.Dimension(50,50));
    jButton3.setMargin(new java.awt.Insets(2,2,2,2));
    jButton3.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14));
    jButton3.setText("发送");
    }
    return jButton3;
    }public static void main(String args[])
    {
    SocketS s1=new SocketS();
    s1.getJFrame();
    }
    }
    class ServerThread extends Thread
    {
    Socket socket=null;
    int count;
    public ServerThread(Socket socket,int num)
    {
    this.socket=socket;
    this.count=num+1;
    }
    public void run()
    {
    try
    {
    BufferedReader sin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter sout=new PrintWriter(socket.getOutputStream());
    }catch(IOException e){System.out.print(e);}

    }
    }这个是我按照“xue98”说的改的,楼上大哥帮我看看呢
      

  4.   

    //把启动的的代码,写入另一个线程,这样,界面才能正常,不被卡死.
    //我只看了你的启动..没看发送..
    jButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) 
    {
    sendThread send=new sendThread(e);
    send.start();
    }
    });class sendThread extends Thread
    {
    java.awt.event.ActionEvent e;
    sendThread(java.awt.event.ActionEvent e)
    {this.e=e;}
    public void run()
    {
    ServerSocket server=null;
    Socket socket=null;
    if(server==null&&socket==null)
    {
    try
    {
    server=new ServerSocket(2006);
    try
    {
    socket=server.accept();
    }catch(Exception e1){System.out.print("asdsad");}
    BufferedReader sin=new BufferedReader(new InputStreamReader(socket.getInputStream()));
    PrintWriter sout=new PrintWriter(socket.getOutputStream());
    }catch(Exception e1){System.out.println("Error."+e1);}
    }
    }
    };