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子进程关闭fd_python – 捕获崩溃的子进程的“分段错误”...

shell可能会生成“Segmentation fault”消息.要找出该过程是否被SIGSEGV杀死,请检查proc.returncode -signal.SIGSEGV.如果要查看消息,可以在shell中运行该命令:#!/usr/bin/env pythonfrom subprocess import Popen, PIPEproc Popen(shell_command, shellTrue, st…

layui 分页 固定底部_论layui的使用体验

layui这个东西有收费跟免费版本,当然我在工作当中用的是免费的版本。至于说我为什么要用这个东西了?原因是这样的,当时我们用的是datatables,由于前期工作上没有相关的需求说是要什么表格相关列固定啊,自动统计啊&…

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

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

章鱼扫描仪:Java构建工具和恶意软件

Alvaro Munoz最近在GitHub Security Lab网站上发布了“ Octopus扫描程序恶意软件:攻击开源供应链 ”。 我发现这篇文章很有趣,原因有很多,其中包括对Octopus Scanner恶意软件如何工作以及如何被发现, GitHub安全事件报告团队 &…

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即将发布,并计划涵盖许多组件/模块的更新,这些…

java 区号_求您!JAVA作业,窗口查询区号!

窗口程序作业说明完成一个查询区号的窗口程序,功能要求如下(作业需要的数据见citycode.txt)程序打开时自动读取保存在文件中的数据信息程序至少提供一个输入及输出控件,一个查询按...窗口程序作业说明完成一个查询区号的窗口程序,功能要求如下…

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

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

AWS Lambda将数据保存在DynamoDB中

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

java 循环map 优雅写法_Java for循环Map集合优化实现解析

这篇文章主要介绍了java for循环map集合优化实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下在《for循环实战性能优化》中提出了五种提升for循环性能的优化策略,这次我们在其中嵌套循环优化小…

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

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

java私有属性和私有方法_Java私有,受保护,公共和默认

java私有属性和私有方法您是Java程序员,所以您知道我在说什么。 public修饰符使方法或字段可从应用程序中的任何位置访问。 那是简单的部分。 但是,您能告诉我protected和包私有的区别吗? (提示:如果您未在方法或字段前…

Maven硒测试自动化教程

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

python处理json数据_python处理json格式的数据

这里我就不介绍json了,不知道json的同学可以去百度一下json,首先我们的json的格式如下,这个json有点长,这个json来自我以前的一个小任务,具体看这里:http://www.cnblogs.com/ybf-yyj/p/7351493.html { &quo…

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) –使用…

java回调spring接口_Spring Boot启动过程及回调接口汇总

启动顺序Spring boot的启动代码一般是这样的:123456SpringBootApplicationpublic class SampleApplication {public static void main(String[] args)throws Exception {SpringApplication.run(SampleApplication.class, args);}}初始化SpringApplication1、SpringA…