⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toppanel.java

📁 用java开发的QQ管理系统
💻 JAVA
字号:
package com.zlf.qqserver.servermngpanel.toppanel;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.BindException;
import java.net.ServerSocket;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.TimeZone;
import java.util.Vector;

import javax.swing.AbstractAction;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

import com.zlf.dao.DaoFactory;
import com.zlf.dao.UserDao;
import com.zlf.qq.pub.DataPacket;
import com.zlf.qqserver.GongGao;
import com.zlf.qqserver.Public;
import com.zlf.qqserver.ServerMain;
import com.zlf.qqserver.serverthread.ServerThread;
import com.zlf.qqserver.utils.QQUtils;

public class TopPanel extends JPanel {
	/**
	 * 
	 */
	private static final long serialVersionUID = -5337830514771311088L;

	private int server = 0; // 0 表示开启服务,1表示关闭服务

	private JButton startBtn = new JButton("开启服务");

	private JButton chatAllBtn = new JButton("发布公告");
	
	private static JTextArea detailJt = new JTextArea(5,5);//中部面板信息

	private JButton LogOutBtn = new JButton("强制下线");

	private Thread myThread = null;
	
	private UserDao userDao = DaoFactory.newInstance().createUserDao();

	private HashMap h=new HashMap();
	
	private JDialog dialog;
	
	public TopPanel(){
		
	}
	

	
	public TopPanel(final ServerMain f) {
		

		this.setLayout(new BorderLayout());
		this.setBorder(new TitledBorder("操作与日志"));
		JPanel jp = new JPanel();
		jp.setLayout(new BoxLayout(jp,BoxLayout.Y_AXIS));
		jp.add(startBtn);
		jp.add(Box.createHorizontalStrut(10));
		jp.add(chatAllBtn);
		chatAllBtn.setEnabled(false);
		jp.add(Box.createHorizontalStrut(10));
		jp.add(LogOutBtn);
		this.add(jp,BorderLayout.WEST);
		detailJt.setEditable(false); 
		detailJt.setBackground(Color.white);
		detailJt.setForeground(Color.BLUE);
	
		JScrollPane   scrollPane   =   new   JScrollPane(detailJt);
		this.add(scrollPane,BorderLayout.CENTER);	

		readLog();
		
		chatAllBtn.addActionListener(new AbstractAction(){

			/**
			 * 
			 */
			private static final long serialVersionUID = 9004899324746751278L;

			public void actionPerformed(ActionEvent e) {
				
				
				dialog = new JDialog(f, "发布公告", true);
				dialog.setSize(450, 250);
				dialog.setResizable(false);
				dialog.setLocationRelativeTo(null);
				Container c = dialog.getContentPane();
				GongGao gonggao = new GongGao(dialog);
				c.add(gonggao);
				dialog.show();
				
				
				
				
			}
			
		});
	
		
		// 强制下线按钮不可用状态
		LogOutBtn.setEnabled(false);
		// 开启按钮
		startBtn.addActionListener(new AbstractAction() {

			/**
			 * 
			 */
			private static final long serialVersionUID = 2814927902762576011L;

			public void actionPerformed(ActionEvent e) {
				

				ServerThread serverThread;
				if (server == 0) {
					// 开启服务创建一个服务线程
					int port = 8000;
					try {
						port = Integer.parseInt(QQUtils.properties.getProperty("ServerSocketPort","8000"));
						Public.serverSocket = new ServerSocket(port);
					} catch (BindException e1) {
						setTShow(Integer.toString(port),3);
						//JOptionPane.showMessageDialog(f, "该端口已绑定!", "提示框",
								//JOptionPane.WARNING_MESSAGE);
						return;
					} catch (IOException e1) {
						e1.printStackTrace();
					}

					serverThread = new ServerThread(Public.stop, f);
					myThread = new Thread(serverThread);
					myThread.start();
					
					setTShow("",1);
					
					chatAllBtn.setEnabled(true);
					
					startBtn.setText("关闭服务");
					server = 1;

				} else {
					
					
					
					
					//Public.stop = true;
					myThread = null;
					//myThread.interrupt();// 终止线程
					try {
						if (Public.serverSocket != null)
							Public.serverSocket.close();
					} catch (IOException e1) {
						return;
					} catch (Exception e1) {
						return;
					}
					
					setTShow("",2);
					LogOutBtn.setEnabled(false);
					
					chatAllBtn.setEnabled(false);
					
					startBtn.setText("开启服务");
					h.clear();
					h.put("9", "");
					Vector vector = userDao.selectUser(h);
					h.clear();
					f.getServerMngPanel().getTablePanel().getDataModel().setData(vector);

					
					Public.serverClose();
//					清空Public.mySocketInfo里存的客户端的信息
					Public.mySocketInfo.clear();
					server = 0;
				}
			}
		});
		// 强制下线
		LogOutBtn.addActionListener(new AbstractAction() {

			/**
			 * 
			 */
			private static final long serialVersionUID = -4064778637335993867L;

			public void actionPerformed(ActionEvent e) {
				// 选中某个用户,点击,强制其下线,发下线包
				// 选中行的个数
//				int rowCount = f.getServerMngPanel().getTablePanel().getTable()
//						.getSelectedRowCount();
				//System.out.println(rowCount);
				//取到所有选中行的索引数组
				
				int[] rows= f.getServerMngPanel().getTablePanel().getTable()
				.getSelectedRows();
				
				String userId = "";
//				System.out.println(rows.length);
				// 循环遍历
				for (int i = 0; i < rows.length; i++) {
					//取用户编号
					//System.out.println(rows[i]);
					userId=(String) f.getServerMngPanel().getTablePanel().getDataModel()
					.getValueAt(rows[i], 0);
					//System.out.println(userId);
					//打包下线包
					HashMap tempdata=new HashMap();
					tempdata.put("data", "服务器强制你下线,程序将自动退出!");
					DataPacket downLinePacket=new DataPacket(DataPacket.server_close_type,DataPacket.Server_Id,"",tempdata);
					//取出用户编号对应的输出流,发给客户端下线包
					ArrayList a=(ArrayList) Public.mySocketInfo.get(userId);
					
					try {
						//给客户端发下线包
						ObjectOutputStream oos=(ObjectOutputStream) a.get(2);
						oos.writeObject(downLinePacket);
						oos.flush();
						//将用户在线标志改为0
						userDao.updateOnLine(0, userId);
						Public.mySocketInfo.remove(userId);
						setTShow(userId,0);
						
					} catch (IOException e1) {
						e1.printStackTrace();
					}
				}
				
				//更新显示在服务器端的上线用户信息
				h.put("9", "");
				
				Vector vector = userDao.selectUser(h);
				h.clear();
				f.getServerMngPanel().getTablePanel().getDataModel().setData(vector);
				
				LogOutBtn.setEnabled(false);
				
				
				
				
				
			}

		});
	}

	
//	把日期转化为字符串
	public static String dateToStr(Date date,String format)
	{
		SimpleDateFormat f = new SimpleDateFormat(format);
		f.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
		return f.format(date);
		
	}  
	/**
	 * 显示日志
	 * @param s
	 * @param type
	 * 1QQ号["+s+"]于:		"+date+"	被服务器强制下线
	 * 2服务开启于:"+date
	 * 3启动服务失败该"+s+" 端口已绑定
	 * 4QQ号["+s+"]于:"+date+"上线了
	 * 5QQ号["+s+"]于:"+date+"下线了
	 * 6在线QQ号["+s+"]于:		"+date+"	被服务器删除了并被迫下线
	 * 7不在线QQ号["+s+"]于:		"+date+"	被服务器删除了
	 * 8程序于:"+date+" 退出了
	 */
	public static void setTShow(String s,int type){
		
		SimpleDateFormat sdf = new SimpleDateFormat(
		"yyyy-MM-dd HH:mm:ss");
		sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
		String date = sdf.format(new Date());
		
		//Calendar
		if (type == 0){
			detailJt.append("QQ号["+s+"]于:		"+date+"	被服务器强制下线");
		}else if (type == 1){
			detailJt.append("服务开启于:"+date);
		}else if (type == 2){
			detailJt.append("服务关闭于:"+date);
		}else if (type == 3){
			detailJt.append("启动服务失败该"+s+" 端口已绑定");
		}else if (type == 4){
			detailJt.append("QQ号["+s+"]于:"+date+"上线了");
		}else if (type == 5){
			detailJt.append("QQ号["+s+"]于:"+date+"下线了");
		}else if (type == 6){
			detailJt.append("在线QQ号["+s+"]于:		"+date+"	被服务器删除了并被迫下线");
		}else if (type == 7){
			detailJt.append("不在线QQ号["+s+"]于:		"+date+"	被服务器删除了");
		}else if (type == 8){
			detailJt.append("程序于:"+date+" 退出了");
		}
		
	
		detailJt.append("\n");
		
		detailJt.setCaretPosition( detailJt.getDocument().getLength());


	}
	
	
	/**
	 * 返回当前日期
	 * @return 当前日期
	 */
	public String getCurDate(){
		SimpleDateFormat sdf = new SimpleDateFormat(
		"yyyy-MM-dd");
		sdf.setTimeZone(TimeZone.getTimeZone("GMT+8:00"));
		return sdf.format(new Date());
	}
	
	/**
	 * 判断日志是否存在
	 */
	public int logExist(){
		File logFile = new File("./log/" + getCurDate() +".txt");
		if(logFile.exists()){
			return 1;

		}else{
			return 0;

		}
	}
	
	public int readLog(){
		
		if (logExist() < 1){
			
			writeLog();
			
			return 0;
		}
		
		String   str   =   null;   
 
		
		BufferedReader Reader = null;
		try {
			Reader = new   BufferedReader(new   FileReader("./log/" + getCurDate() +".txt"));
			while(true){   
				str   =   Reader.readLine();   

				if   (str   ==   null)     break;  
				detailJt.append(str);
				detailJt.append("\n");
				   
			}  
			if (str == null) return -1;
			
			
			
			return 1;
			//detailJt.append("\n");
			
		} catch (FileNotFoundException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
			return 0;
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
			return 0;
		}finally{
			try {
				Reader.close();
			} catch (IOException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}  
			
		}
	}
	
	public int writeLog(){
		//   写   ---------------------------------------------------   
		FileWriter Writer = null;
		try {
			Writer = new   FileWriter("./log/" + getCurDate() +".txt");
			Writer.write(detailJt.getText());  
			
			Writer.flush();
			return 1;
		} catch (IOException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
			return 0;
		}finally{
			
			try {
				Writer.close();
			} catch (IOException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}   
			
		}
		
		
		
		//--------------------------------------------------- 
	}


	public JButton getLogOutBtn() {
		return LogOutBtn;
	}

	public void setLogOutBtn(JButton logOutBtn) {
		LogOutBtn = logOutBtn;
	}

	public int getServer() {
		return server;
	}

	public void setServer(int server) {
		this.server = server;
	}

	public JButton getStartBtn() {
		return startBtn;
	}

	public void setStartBtn(JButton startBtn) {
		this.startBtn = startBtn;
	}

	public JTextArea getDetailJt() {
		return detailJt;
	}



	public Thread getMyThread() {
		return myThread;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -