站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2SE 专题我的Serversocket为什么不能正常启动?

我的Serversocket为什么不能正常启动?

摘要: 我的Serversocket为什么不能正常启动?


程序如下:

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();
}
}
一点启动按纽程序就死了,调了半天还是不在的问题出在哪,高手帮忙啊


没人回吗?
自己顶,55555


这个东西我也不懂,学习中


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


照楼上的方法试了一下,还是不行啊


整个网页我都没有搜到Thread的字样就肯定不对了.

你要吧accept方法放到一个线程中去,然后我们再看能不能连上了.



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”说的改的,楼上大哥帮我看看呢


//把启动的的代码,写入另一个线程,这样,界面才能正常,不被卡死.
//我只看了你的启动..没看发送..
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);}
}
}
};


终于成功了,谢谢各位,现在回过头来看大家说的都对,我给你们每人加一点,谢谢拉,最后一位直接给出正确方法,给他最多哦~


↑返回目录
前一篇: 正则表达式怎么实现匹配?
后一篇: 20分求解:这样强制类型转换怎么不行啊