基于JAVA Swing,Hibernate,MySQL模拟QQ
2017-09-18 23:18
330 查看
基于JAVA Swing,Hibernate,MySQL模拟QQ
本人目前只是研究生一名,最近比较清闲,就用手头上会的一点工具写了一个模拟QQ的工具;以下的几篇博客就简单的阐述一下实现思路,以及具体的方法和遇到的一些问题;配置列表 :
Windows 10
Eclipse 4.7.0
Hibernate 5.5
MySQL 5.7
基本框架 :
框架组成 :
Senter : 信息的发送器;创建Socket和对象输出流;
Accepter : 信息接收器 ;创建ServerSocket和对象输入流;客户端的Accepter还兼资源池的作用,传入的数据会被分类保存在Accepter的静态代码块中;客户端的其他模块会调用该资源池;
JFrames : 客户端生成模拟QQ的各种面板;
Inquirer : 服务器向MySQL交互,增删改查;
信息类 :
User : 客户基本信息: id,name,tempmsg,password,ip等
Message : 消息基本信息: senter,accepter,msg,id,time;
Integer : 由服务器向客户端发送的确认信息;客户端会根据这些不同的信息作出相应的相应;不同的数值代表不同的含义;
其他注意事项:目前该项目还有一些缺陷;比如没有优化服务器的并发问题;传输的数据没有实现加密等;
好了,下面开始讲具体的实现了:首先是登陆面板:
package likeQQ; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.event.ActionEvent; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.io.IOException; import java.net.InetAddress; import java.net.UnknownHostException; import javax.imageio.ImageIO; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; public class LoginPanel extends JFrame{ private static final long serialVersionUID = 1L; private JTextField txtAc = new JTextField(15); private JPasswordField txtPW = new JPasswordField(15); private JButton LoginBtn = new JButton(); private JButton RegisterBtn = new JButton(); private ImageIcon icon,registerImg; private LoginPanel(){ setSize(500,300); setDefaultCloseOperation(3); setLocation(300,30); LoginBtn.addActionListener((ActionEvent e)-> this.judgement()); RegisterBtn.addActionListener((ActionEvent e)-> RegisterPanel.getRegisterPanel()); txtAc.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) txtPW.requestFocus(); }}); txtPW.addKeyListener(new KeyAdapter() { public void keyTyped(KeyEvent e) { if (e.getKeyChar() == KeyEvent.VK_ENTER) judgement(); }}); icon = new ImageIcon(this.getClass().getResource("/materials/btn1.png")); registerImg = new ImageIcon(this.getClass().getResource("/materials/btn2.png")); JPanel jp = new JPanel(){ protected void paintComponent(Graphics g) { try { g.drawImage(ImageIO.read(this.getClass(). getResource("/materials/bk.png")), 0, 0, null); } catch (IOException e) { e.printStackTrace(); } g.setColor(Color.GRAY); g.setFont(new Font("Brush script MT",Font.BOLD,30)); g.drawString("Account :",90,100); g.drawString("PassWord:",90,130); } }; jp.setSize(500,300); jp.setLocation(0, 0); jp.setLayout(null); jp.add(txtAc); jp.add(txtPW); jp.add(LoginBtn); jp.add(RegisterBtn); txtAc.setLocation(240, 85); txtPW.setLocation(240, 110); txtAc.setSize(120,23); txtPW.setSize(120,23); LoginBtn.setLocation(210,150); LoginBtn.setSize(70, 25); LoginBtn.setIcon(icon); LoginBtn.setOpaque(false); LoginBtn.setContentAreaFilled(false); RegisterBtn.setLocation(295,150); RegisterBtn.setSize(70, 25); RegisterBtn.setIcon(registerImg); RegisterBtn.setOpaque(false); RegisterBtn.setContentAreaFilled(false); add(jp); setResizable(false); setLayout(null); setVisible(true); } private static final LoginPanel loginpanel = new LoginPanel(); public static LoginPanel getLoginPanel(){ return loginpanel; } private void judgement(){ User localUser = new User(); if(txtAc.getText()!=null || String.valueOf(txtPW.getPassword())!=null ||!"".equals(txtAc.getText())||!"".equals(String.valueOf(txtPW.getPassword()))){ localUser.setUserName(txtAc.getText()); localUser.setPassword(String.valueOf(txtPW.getPassword())); Senter.getInstance().sent(localUser); } int count=0; while (Acceptor.Feedback==0) { count++; try { Thread.sleep(20); } catch (InterruptedException e) { e.printStackTrace(); } if(count>200){ JOptionPane.showMessageDialog(null,"Network connection timeout..."); break; } } if(Acceptor.Feedback==1 ){//&& Acceptor.Friendlist!=null Acceptor.host = localUser; Acceptor.listpanel = ListPanel.getInstance(Acceptor.Friendlist); Acceptor.listpanel.setTitle(txtAc.getText()); this.dispose(); Acceptor.Feedback=0; } else if(Acceptor.Feedback==2< 8b99 /span>) JOptionPane.showMessageDialog(null,"Login Failed"); Acceptor.Feedback=0; } }
相关文章推荐
- 基于JAVA Swing,Hibernate,MySQL模拟QQ(二)
- 自己模仿QQ基于Java Swing做的一个QQ界面
- 基于JavaSwing+MySQL写的图书进销存管理系统
- java课程设计模拟计算器:基于swing的高仿真模拟计算器 Eclipse6.5
- JAVA学习第六十课 — UDP协议 &基于多线程模拟简单的QQ聊天程序
- Java Swing,模拟事件驱动
- java swing技巧1:基于图像的组件-JLabel、JButton、JPanel
- java;jsp;tomcat;mysql;hibernate;j2ee 编码中文乱码完美彻底全面解决方案
- 使用MySQL和Hibernate时,出现java.lang.UnsupportedOperationException: Update queries only supported through HQL异常的解决方法
- 用swing开发 震撼的CSDN用户关系图(转)和基于JMF的java rpg入门游戏
- 基于Spring+Hibernate+Eclipse进行敏捷Java开发(转)
- 基于泛型DAO的Facade设计模式. - Hibernate - Java
- java;jsp;tomcat;mysql;hibernate;j2ee 编码中文乱码全面解决方案
- 9.3 Eclipse中使用Ant(转自:《项目实践精解:基于Struts-Spring-Hibernate的Java应用开发》)
- Java 反射机制模拟hibernate实现持久化
- 基于james3.0 的邮件系统(struts2.3.2 +spring3.0.1+jpa(hibernate3.6.5)实现)b/s模式--java邮件系统
- FeedBurner:基于MySQL和JAVA的可扩展Web应用
- java与MYSQL连接的精典例子,用swing显示
- 用swing开发 震撼的CSDN用户关系图(转)和基于JMF的java rpg入门游戏
- java+mysql中保存图片及显示上传的图片struts+hibernate