java 多线程 聊天_Java做一个多线程类似于QQ的聊天程序。

展开全部

//时间关系,粗略的做了一下,一个模拟UDP协议的测试,图标,IP,以及端口都可以设成

//发送者端的电脑参数32313133353236313431303231363533e78988e69d8331333366306533!

import java.awt.BorderLayout;

import java.awt.Color;

import java.awt.GridLayout;

import java.awt.event.KeyAdapter;

import java.awt.event.KeyEvent;

import java.awt.event.MouseAdapter;

import java.awt.event.MouseEvent;

import java.io.IOException;

import java.io.Serializable;

import java.net.DatagramPacket;

import java.net.DatagramSocket;

import java.net.InetAddress;

import java.net.SocketException;

import java.net.UnknownHostException;

import java.text.SimpleDateFormat;

import java.util.Date;

import javax.swing.ImageIcon;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JPanel;

import javax.swing.JScrollPane;

import javax.swing.JTextArea;

public class Day03_A extends JFrame implements Serializable {

private static final long serialVersionUID = 57L;

private JTextArea txtRece, txtSend;// 接受与发送文本域!

private JPanel jp1, jp2;// 面板!

private JScrollPane jsp;

private JLabel jab;// 标签

private JButton jb;// 按钮

private JMenuBar jmb;// 窗体状态栏

private JMenuItem a=null,b=null;

private DatagramSocket dsend = null, drece;

private DatagramPacket dp1, dp2;

private byte[] by1, by2;

private String[][][] menArr= {{{"语言"},{"中文","英文"}},{{"字体"},{"隶书","彩云",}},{{"辅助"},{"放大","缩小"}},{{"功能"},{"计算","闹钟"}}};

Day03_A() {

by2 = new byte[1024];

this.setTitle("山寨QQ测试");// 窗体标题

this.setBounds(300, 300, 400, 500);// 位置及大小!

this.setResizable(false);

this.setIconImage(new ImageIcon("E:/Java_Worker/Day_41学习_Gui/src/com/djw/swing01/qq.png").getImage());

this.setLayout(new GridLayout(2, 1));// 网格模式2行1列

init();

this.setJMenuBar(jmb);

this.setVisible(true);

}

private void init() {

jmb = new JMenuBar();

for(int i=0;i

for(int j=0;j

for(int x=0;x

if(j==0) {

a=new JMenu(menArr[i][j][x]);

}else {

b=new JMenuItem(menArr[i][j][x]);

a.add(b);

}

}

jmb.add(a);

}

}

jp1 = new JPanel();

jp1.setLayout(new BorderLayout());

txtRece = new JTextArea();

jsp = new JScrollPane(txtRece);

jsp.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);

this.add(jsp);

jp2 = new JPanel();// 面板

jp2.setBackground(new Color(107, 197, 127));

jp2.setLayout(new BorderLayout());

txtSend = new JTextArea();

jab = new JLabel();

jab.setText("[ALT+S]/[回车+CTRL]或者[点击发送按钮]:发送信息");

jab.setHorizontalAlignment(JLabel.CENTER);// 标签文本居中

jb = new JButton("发送");

jp2.add(jab, BorderLayout.NORTH);// 指定到面板北面

jp2.add(txtSend, BorderLayout.CENTER);// 文本放中间

jp2.add(jb, BorderLayout.SOUTH);

this.add(jp2);

myeve();

}

private void myeve() {

this.setDefaultCloseOperation(EXIT_ON_CLOSE);// 窗体可关闭

try {

dsend = new DatagramSocket();// 发送端套接字

drece = new DatagramSocket(10008);

} catch (SocketException e) {

e.printStackTrace();

}

re();// 启动无限循环侦听!

txtSend.addKeyListener(new KeyAdapter() {

public void keyPressed(KeyEvent k) {

if (k.isControlDown() && k.getKeyCode() == KeyEvent.VK_ENTER) {

se();

}

if (k.isAltDown() && k.getKeyCode() == KeyEvent.VK_S) {

se();

}

}

});

jb.addMouseListener(new MouseAdapter() {

public void mouseClicked(MouseEvent arg0) {

se();

txtSend.requestFocus();

}

});

}

private void se() {

try {

by1 = txtSend.getText().getBytes();

dp1 = new DatagramPacket(by1, by1.length, InetAddress.getByName("192.168.2.4"), 10008);

dsend.send(dp1);// 推送数据

txtSend.setText(null);

} catch (UnknownHostException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

private void re() {

new Thread() {

public void run() {

while (true) {

try {

String time = new SimpleDateFormat("MM-dd/HH:mm").format(new Date());

dp2 = new DatagramPacket(by2, by2.length);

drece.receive(dp2);

String ip = dp2.getAddress().getHostAddress();

txtRece.append("用户IP:" + ip + "  时间:");

txtRece.append(time + ": " + System.getProperty("line.separator"));

txtRece.append(new String(by2, 0, dp2.getLength()) + System.getProperty("line.separator"));

txtRece.setCaretPosition(txtRece.getText().length());

} catch (IOException e) {

e.printStackTrace();

}

}

}

}.start();

}

public static void main(String[] args) {

new Day03_A();

}

}

77cb9fd5629a5e26f65db256ac3b7d19.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340154.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

组织机构代码输入测试用例_测试代码以用于过大的输入

组织机构代码输入测试用例在编写单元测试时,我们主要关注业务的正确性。 我们将竭尽所能,开开心心地走在最前沿。 我们有时会进行微基准测试并衡量吞吐量。 但是经常遗漏的一个方面是当输入过大时我们的代码如何表现? 我们测试了如何处理正常…

巴特沃斯滤波器python_如何用Scipy.signal.bu实现带通巴特沃斯滤波器

您可以跳过button的使用,而只需为过滤器选择一个顺序,看看它是否符合您的过滤条件。要生成带通滤波器的滤波器系数,请将滤波器阶数、截止频率Wn[low, high](表示为奈奎斯特频率的分数,即采样频率的一半)和频…

java gnu_GNU/Linux下Java开发环境的安装和配置 | 学步园

首先下载JDK,在http://www.oracle.com/technetwork/java/javase/downloads/index.html下载最新版本的JDK,选择平台为linux,就会得到一个二进制文件,我得到的是jdk-6u23-linux-i586.bin,复制到需要安装的地方运行就会自…

css初始化_利用CSS变量实现炫酷的悬浮效果

这个动画是将鼠标移动到订阅按钮上移动光标会显示相应的彩色渐变。这个想法很简单,但是它能使这个按钮脱颖而出,人们一下子就注意到它了,增加了点击的概率。怎样才能达到这个效果,使我们的网站脱颖而出呢?其实&#xf…

glass fish_Glass Fish 4.0.1中的Jersey SSE功能

glass fishGlass Fish为各种Java EE规范捆绑了不同的参考实现,例如,CDI的Weld,JSF的Mojarra,WebSocket的Tyrus,JAX-RS的Jersey。 Glass Fish 4.0.1即将发布,并计划涵盖许多组件/模块的更新,这些…

css清除浮动的几种方法_web前端学习路线分享CSS浮动-清除浮动篇

web前端学习路线分享CSS浮动-清除浮动篇,为什么要清除浮动这里所说的清除浮动,并不是不要浮动了,而是清除浮动与浮动之间的影响。那么到底会有什么影响呢?1.高度塌陷举个例子我们看一下。我们在这里设置了div0是外容器…

AWS Lambda将数据保存在DynamoDB中

在本教程中,我们将看到如何使用AWS Lambda将数据保存在Dynamo DB中。 这是必需的步骤: – 在Dynamo数据库中创建一个名为Employee的表 –创建一个AWS Lambda函数,该函数可以使用Dynamo数据库中的Employee POJO保存雇员的名字和姓氏 –创建…

java list 取几个字段组装成map_24道Java各类常见问题整理

(1) JSP学了EL表达式就行了吧,还需要深入么?还有spring现在学5就行了吧?总觉得类与对象这里好难,理解不来(2) 我想问问在校生需要学习JAVA到哪种程度,然后再学学数据结构和算法能达到校招面试的水平(3) 静态变量与实例…

Maven硒测试自动化教程

在进行测试自动化项目时,您需要与之关联的所有Selenium依赖项。 通常,这些依赖项是在项目生命周期中手动下载和升级的,但是随着项目规模的扩大,管理依赖项可能会非常困难。 这就是为什么需要构建自动化工具(例如Maven&…

java确认rabbitmq_RabbitMQ 消息确认机制

生产端 Confirm 消息确认机制消息的确认,是指生产者投递消息后,如果 Broker 收到消息,则会给我们生产者一个应答。生产者进行接收应答,用来确定这条消息是否正常的发送到 Broker ,这种方式也是消息的可靠性投递的核心保…

hadoop源码分析_Spark2.x精通:Job触发流程源码深度剖析(一)

, 一、概述 之前几篇文章对Spark集群的Master、Worker启动流程进行了源码剖析,后面直接从客户端角度出发,讲解了spark-submit任务提交过程及driver的启动;集群启动、任务提交、SparkContext初始化等前期准备工作完成之后&am…

如何在Java中将String转换为int

在本教程中,我们将看到将Java中的String转换为int(或Integer)的各种方法。 您可以使用以下任何一种方式: –使用Integer.parseInt(string) –使用Integer.valueof(string) –使用…

jboss 程序位置_介绍JBoss BPM Suite安装程序

jboss 程序位置本周,我们想向您介绍JBoss BRMS和JBoss BPM Suite产品随附的一个鲜为人知的安装程序组件。 请注意,当前所有的演示项目都要求您下载JBoss BPM Suite可部署的eap zip产品文件和JBoss EAP 6.1.1 zip产品文件。 展望未来,我们将迁…

java换成中文_如果我们的编程替换成中文会变成怎样?

首先大概的看一下中文编码:你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样。编程是和机器沟通,因此要用机器的语言而不是人类的语言。最早的程序就是0和1的数字,不是中文也不是英文。以前的程序员,…

高等数学公式大全_高中物理知识思维导图大全,赶紧收藏!

物理作为理综的重中之重,物理的学习一直是广大考生的难点。如何快捷高效的掌握物理知识点是高考复习的重点之一,根据高中物理三年知识点用思维导图的方式,来助大家掌握物理知识点。运动的描述 重力 基本相互作用 相互作用 牛顿运动定律 力的合…

go环境搭建_学习的golang第一步,搭建我们运行的环境,go! go! go

这是Golang教程系列中的第一个教程。本教程介绍了Go,并讨论了选择Go优于其他编程语言的优势。我们还将学习如何在Mac OS,Windows和Linux中安装Go。介绍Go也称为Golang是由Google开发的一种开源,编译和静态类型的编程语言。创造Go的关键人物是…

如何在Java中将数组转换为列表

你好朋友, 在本教程中,我们将学习将数组转换为List的各种方法。 package com.blogspot.javasolutionsguide;import com.google.common.collect.Lists; import org.apache.commons.collections4.CollectionUtils;import java.util.ArrayList; import ja…

html5网页制作代码_HTML5的网页设计教程

关注小编,教你如何制作网页HTML5是超文本标记语言(HyperText Markup Language)的第五代版本,它是书写网页代码的一种规范、一种标准。它通过标记符号来标记要显示的网页中的各个部分。浏览器根据这个标准显示其中的内容(如:文字如何处理&…

aop+注解 实现对实体类的字段校验_SpringBoot实现通用的接口参数校验

来自:掘金,作者:cipher链接:https://juejin.im/post/5af3c25b5188253064651c76原文链接:http://www.ciphermagic.cn/spring-boot-aop-param-check.html本文介绍基于Spring Boot和JDK8编写一个AOP,结合自定义…

java基础分享_一、java基础教程

1、java是一门比较纯粹的面向对象编程语言,所以java的所有代码都必须写在类的内部。1.1 java的可执行文件后缀名是".java",例如HelloWorld.java,并且每个可执行文件内部,必须有且仅有一个public公共类/公共接口/公共抽象…