📄 server.java
字号:
package qianqian.gui;
import javax.swing.AbstractAction;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPopupMenu;
import javax.swing.JTextArea;
import javax.swing.JScrollPane;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import javax.swing.border.MatteBorder;
import java.awt.event.ActionEvent;
import java.awt.event.MouseEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.WindowEvent;
import java.io.FileOutputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import qianqian.cschat.Service;
import qianqian.p2pchat.control.Controller;
import qianqian.p2pchat.tools.Tools;
//服务器端的监听窗口
public class Server extends JFrame {
static final long serialVersionUID = 1;
private JTextArea loger;
private static Server server;
private MatteBorder border = new MatteBorder(
new java.awt.Insets(1, 1, 1, 1), new java.awt.Color(195, 225, 255));
private JPopupMenu popup;
private final String clrLog = "刷新日志";
private final String loadLog = "加载日志";
private final String hideLog = "隐藏窗口";
private final String quitLog = "关闭服务";
// 建立监听服务的窗口并显示
private Server() {
initPopupMenu();
setTitle("QianQian Logger");
setIconImage(new javax.swing.ImageIcon("icons/www.gif").getImage());
loger = new JTextArea();
loger.setEditable(false);
loger.setBorder(border);
JScrollPane jscrl = new JScrollPane(loger);
jscrl.setPreferredSize(new java.awt.Dimension(300, 150));
jscrl.setAutoscrolls(true);
getContentPane().add(jscrl, "Center");
getContentPane().add(new JLabel(new ImageIcon("icons/title.gif")),
"North");
setLocation(350, 250);
setResizable(false);
setAlwaysOnTop(true);
pack();
loger.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON3) {
popup.show(loger, e.getX(), e.getY());
popup.pack();
popup.setVisible(true);
}
}
public void mouseReleased(MouseEvent e) {
if (MouseEvent.BUTTON3 == e.getButton()) {
popup.show(loger, e.getX(), e.getY());
popup.pack();
popup.setVisible(true);
}
}
});
addWindowListener(new java.awt.event.WindowAdapter() {
public void windowClosing(WindowEvent e) {
dispose();
}
public void windowIconified(WindowEvent e) {
setVisible(false);
}
});
}
public static Server getInstance() {
if (server == null) {
synchronized(Server.class) {
if(server == null)
server = new Server();
}
}
return server;
}
private void initPopupMenu() {
popup = new JPopupMenu();
popup.setInvoker(this);
popup.add(new AbstractAction(clrLog) {
static final long serialVersionUID = 1;
public void actionPerformed(ActionEvent e) {
try {
clrLog();
} catch (Exception ex) {
ex.printStackTrace();
}
loger.setText("");
}
});
popup.add(new AbstractAction(loadLog) {
static final long serialVersionUID = 1;
public void actionPerformed(ActionEvent e) {
try {
loadLog();
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
popup.add(new AbstractAction(hideLog) {
static final long serialVersionUID = 1;
public void actionPerformed(ActionEvent e) {
try {
setVisible(false);
} catch (Exception ex) {
ex.printStackTrace();
}
}
});
popup.add(new AbstractAction(quitLog) {
static final long serialVersionUID = 1;
public void actionPerformed(ActionEvent e) {
dispose();
}
});
}
public synchronized void setLog(String protocol, String log, String info) {
loger.append(protocol + "Connected from " + log + "\0\0>>" + info
+ '\n');
}
private void clrLog() throws Exception {
String log = loger.getText();
if (!log.isEmpty()) {
FileOutputStream fos = new FileOutputStream("log/server.log", true);
fos.write((Tools.getTimeInfo()+"\r\n").getBytes());
fos.write(log.getBytes());
fos.close();
}
}
private void loadLog() throws Exception {
File logFile = new File("log/server.log");
if (logFile.exists()) {
BufferedReader reader = new BufferedReader(new InputStreamReader(
new FileInputStream(logFile)));
while (reader.ready()) {
loger.append(reader.readLine() + "\n");
}
reader.close();
logFile.delete();
}
}
public void dispose() {
int message = JOptionPane.showConfirmDialog(this, "真的要关闭服务器?", "提示",
JOptionPane.YES_NO_OPTION, JOptionPane.INFORMATION_MESSAGE);
if (message == 0) {
try {
Controller.getInstance().quit();
Service.getInstance().quit();
clrLog();
} catch (Exception ex) {
}
super.dispose();
System.exit(0);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -