`
testunity
  • 浏览: 615 次
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

帮忙看下 java socket 跟 jframe

    博客分类:
  • JAVA
 
阅读更多

new 个 JFrame 再new Socket 了来就卡死了。请帮忙看看是怎么回事,刚学java贴出来

 

import java.awt.BorderLayout;


//读取信息线程
class GetMessage extends Thread
{
	private BufferedReader br=null;
	private Boolean flag=true;

	public GetMessage(BufferedReader br)
	{
		this.br=br;
	}
	@Override
	public void run() {
		while(flag)
		{
			try {
				String str=br.readLine();
				if(str.isEmpty())
				{
					flag=false;
					br.close();
				}
				System.out.println("系统返回来的: "+str);
			} catch (IOException e) {
				e.printStackTrace();
			}
		}		
	}
}

class SendMessage extends Thread
{
	private BufferedReader br=null;
	private PrintWriter pw=null;
	private Boolean flag=true;

	public SendMessage(PrintWriter pw,BufferedReader br)
	{
		this.br=br;
		this.pw=pw;
	}
	@Override
	public void run() {
		while(flag)
		{	
			SocketClient.OutStreamStr(pw, br);	
		}		
	}
}

//主进程
public class SocketClient {
	private Socket client=null;
	private Boolean flag=true;
	private BufferedReader br =null;
	private BufferedReader br2 =null;
	private PrintWriter pw = null;
	public SocketClient()
	{
		try {

			client=new Socket();
			client.connect(new InetSocketAddress("127.0.0.1",2000));
			pw = new PrintWriter(client.getOutputStream(),true);		
			br2=new BufferedReader(new InputStreamReader(System.in));
		
			br =new BufferedReader(new InputStreamReader(client.getInputStream())); //从服务器读来的信息
			GetMessage gm = new GetMessage(br);
			gm.start();
			SendMessage sm = new SendMessage(pw,br2);
			sm.start();
/*			while(flag)
			{	
				sendMessage(br2.readLine());
				//pw.println(br2.readLine());
				//pw.flush();
				//System.out.println("系统返回来的: "+br.readLine());
			}*/
			try {
				closeSocket();
			} catch (Exception e) {
				e.printStackTrace();
			}
		} catch (UnknownHostException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public static void OutStreamStr(PrintWriter pw,BufferedReader br)
	{
		try {
			pw.println(br.readLine());
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	private void sendMessage(String str)
	{
		pw.println(str);
	}
	//关闭
	private void closeSocket() throws Exception
	{	
		flag=false;
		if(br!=null)
			br.close();
		if(br2!=null)
			br2.close();
		if(pw!=null)
			pw.close();
		if(!client.isClosed())
			client.close();
	}	
	
}

 import java.awt.BorderLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//GUI
//borderLayout把一个容器分为五块东西南北中,flowLayout是流型的,一行排不完下行继续。gridlayout是网格型的,各个格子大小都一样。
class ClientChat extends JFrame {
	public ClientChat()
	{
		new SocketClient();
		//发送按钮布局
		JPanel jp1 = new JPanel(new BorderLayout());
		JButton jb=new JButton("发送");
		JTextField jtf=new JTextField("label:");
		jp1.add(jtf,BorderLayout.WEST);
		jp1.add(jb,BorderLayout.SOUTH);
		
		
		JScrollPane jsp= new JScrollPane();
		JTextArea ta= new JTextArea("", 5, 50);;
		ta.setLineWrap(true);
		//jsp.setSize(400, 250);
		jsp.add(ta);
		jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		
		this.add(ta,"Center");
		this.add(jp1,BorderLayout.SOUTH);
		this.setSize(400, 300);
		this.setVisible(true);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {	
		new ClientChat();
	}
	//@Override
	public void run() {
			
	}

}

 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 java.util.HashMap;


public class SocketServer {

	private ServerSocket server=null;
	private Boolean flag=true;
	private BufferedReader br=null;
	private PrintWriter pw=null;
	
	public SocketServer()
	{
		try {
			server = new ServerSocket(2000);
			while(flag)
			{
				Socket s=server.accept();
				new ListSocket(s).start();
			}
			server.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		new SocketServer();
	}

	class ListSocket extends Thread
	{
		private Socket s=null;
		private Boolean flag1=true;
		private BufferedReader br =null;
		private PrintWriter pw = null;
		public ListSocket(Socket s)
		{
			this.s=s;
			//ListSaveSocket.listSocket.put("1", s);		
			//Socket hm=ListSaveSocket.listSocket.get("1");
		}
		private void closeSocket() throws Exception
		{	
			flag1=false;
			if(br!=null)
				br.close();
			if(pw!=null)
				pw.close();
			if(!s.isClosed())
				s.close();
			System.out.println("半闭了连接");
		}
		@Override
		public void run() {
			try {				
				System.out.println("有哥们进来了");
				br = new BufferedReader(new InputStreamReader(s.getInputStream()));
				pw = new PrintWriter(s.getOutputStream());
				while(flag1)
				{				
					String str= br.readLine();
					if(str.equals(""))
					{
						//flag=false;
						//s.close();
					}
					//pw.println(str);
					//pw.flush();
					System.out.println("哥们发过来的信息: "+str);
				}
				try {
					closeSocket();
				} catch (Exception e) {
					e.printStackTrace();
				}
			} catch (IOException e) {				
				try {
					closeSocket();
						
				} catch (Exception e1) {
					e1.printStackTrace();
				}
				System.out.println(s.isConnected());
				System.out.println(s.isInputShutdown());
				System.out.println(s.isOutputShutdown());
				e.printStackTrace();
			}

		}
	}
}
class ListSaveSocket
{
	public static HashMap<String, Socket> listSocket =null;
}
找到问题了,用了个system.in控制台来输入,又new了个窗口出来就冲突了吧


  


  
分享到:
评论

相关推荐

    java socket+JFrame实现发送文件私聊群聊功能

    Java Socket和JFrame是Java编程中的重要组成部分,用于构建网络通信和图形用户界面。在这个项目中,我们将讨论如何使用它们来实现一个具有私聊和群聊功能的文件发送系统。 首先,`Socket`是Java提供的网络编程接口...

    Java Socket 操作 Demo

    Java Socket 操作 Demo import java.awt.Color; import java.awt.Dimension; import java.awt.Point; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.BufferedReader; import ...

    Java Socket使用实例

    在Java中,Socket类位于`java.net`包下,提供了创建和管理TCP连接的方法。 1. **服务器端**:服务器端通常监听特定的IP地址和端口号,等待客户端的连接请求。在Java中,我们使用`ServerSocket`类来创建服务器端。...

    Java socket聊天室+窗口抖动

    Java Socket是Java编程语言中用于网络通信的核心API,它提供了低级别的、面向连接的、可靠的、基于字节流的通信。在这个"Java socket聊天室+窗口抖动"项目中,我们将探讨如何使用Java Socket构建一个基本的多人在线...

    java JFrame框架的应用

    Java JFrame框架是Java Swing库中的一个核心组件,用于创建窗口应用程序。它提供了基本的窗口功能,包括窗口的大小调整、关闭、最小化和最大化等。在Java GUI编程中,JFrame是一个不可或缺的部分,用于构建图形用户...

    java JFrame,java se,javase

    Java JFrame是Java Swing库中的一个核心组件,用于创建图形用户界面(GUI)的应用程序窗口。在Java SE(标准版)环境中,JFrame是构建桌面应用的主要框架。它提供了丰富的功能,如添加组件、设置窗口属性、处理事件...

    java socket gui 的小 demo

    Java Socket GUI 小 Demo 是一个基于Java编程语言实现的客户端-服务器通信的应用示例,它结合了Socket编程和图形用户界面(GUI)技术。Socket编程是网络编程的基础,用于在不同计算机之间建立连接并交换数据。GUI则...

    java中JFrame布局

    在Java编程语言中,`JFrame` 是一个重要的类,它是大部分图形用户界面(GUI)应用程序的基础。`JFrame` 提供了一个窗口,可以在这个窗口上添加组件来创建丰富的交互式应用。`JFrame` 的布局管理是决定这些组件如何在...

    JAVA学习笔记swing JFrame窗口学习.rar_it_java swing_jframe_jframe mwc

    首先,JFrame是Java AWT(Abstract Window Toolkit)框架的扩展,它是顶级容器,意味着它可以独立显示并包含其他组件。在Swing中,JFrame用于构建窗口应用的核心,它提供了一个包含菜单栏、边框、内容面板以及可以...

    java Socket实现聊天程序

    java聊天室程序源码 2 需求分析 2.1 业务需求 1. 与聊天室成员一起聊天。 2. 可以与聊天室成员私聊。 3. 可以改变聊天内容风格。 4. 用户注册(含头像)、登录。 5. 服务器监控聊天内容。 6. 服务器过滤非法内容。 7...

    Java JFrame窗体弹窗_java_jframe

    Java JFrame窗体弹窗是Java Swing库中的一个核心组件,用于创建GUI应用程序的主窗口。在Java中,JFrame是一个顶级容器,它提供了显示其他组件(如按钮、文本框等)的基础框架。JFrame不仅提供了窗口的基本功能,如...

    java jframe透明代码

    ### Java JFrame 透明效果实现详解 #### 一、引言 在GUI开发中,有时我们需要为应用程序添加一些视觉上的特效来提升用户体验。其中,实现窗口的透明度调节就是一种非常实用且炫酷的功能。本文将详细介绍如何利用...

    java开发可安装程序exe的JFrame相关jar包.rar

    Java开发中的可安装程序通常指的是将Java应用程序转换为操作系统原生的可执行文件,例如Windows下的.exe文件。这种转换使得用户无需安装Java运行环境就能直接运行程序,提高了用户体验。在这个"java开发可安装程序...

    Java使用JFrame开发出漂亮的桌面程序附源码下载

    Java JFrame 是Java Swing库中的一个核心组件,用于创建桌面应用程序的主窗口。它是一个顶级容器,可以添加其他组件,如按钮、文本框等,来构建用户界面。在本教程中,我们将深入探讨如何利用JFrame开发出美观的桌面...

    Java JFrame简单聊天程序

    Java JFrame简单聊天程序是基于Java Swing库中的JFrame组件实现的一个基本交互式应用程序,它允许用户之间进行实时的文本通信。在Java编程中,JFrame是窗口类的基础,用于创建带有菜单栏、组件和布局的主窗口。在这...

    JAVA SOCKET+swing在netbeans6.0中的实现历程

    Java Socket编程是网络编程的基础,它允许两个应用程序通过TCP/IP协议进行通信。在这个"JAVA SOCKET+swing在netbeans6.0中的实现历程"的例子中,我们将深入探讨如何使用Java Socket和Swing库在NetBeans 6.0集成开发...

    java实现在JFrame窗口进行图片拖拽

    在Java编程环境中,实现图片在JFrame窗口中的拖放功能是一项常见的需求,特别是在开发桌面应用时。这个功能涉及到了Java的Swing库,图形用户界面(GUI)的设计以及事件处理。下面将详细介绍如何利用Java来实现在...

    java基于socket的文件发送与接收,有界面,有进度条

    Java基于Socket的文件发送与接收是一个常见的网络编程任务,它涉及到客户端和服务器之间的通信,以及大数据量的传输。在本项目中,开发者为用户提供了一个图形用户界面(GUI),并且在传输过程中显示了进度条,这...

    java自定义JFrame风格窗体

    在Java编程语言中,`JFrame`是Swing库中的一个关键组件,它用于创建窗口应用程序的基础框架。自定义`JFrame`风格窗体是指开发者根据自己的需求,打破默认的系统样式,创建具有独特外观和行为的窗口。这通常涉及到对...

    java swing socket聊天

    Java Swing Socket聊天程序是一种基于Java GUI(图形用户界面)技术和Socket网络编程的简单通信应用。Swing是Java标准库中的一个模块,提供了丰富的组件库,用于构建桌面应用程序的用户界面。Socket则是网络编程的...

Global site tag (gtag.js) - Google Analytics