Java 具有swing系统托盘图标的高CPU使用率
在我使用的一个简单的swing应用程序中 代码正常,创建托盘,设置图标,添加事件。但当应用程序使用系统托盘执行时,CPU使用率高达50%。如果未使用系统托盘代码,则CPU使用情况良好。如何解决这个问题 编辑: 下面是代码,虽然不是完整的源代码,但主要的两个java文件如下:Java 具有swing系统托盘图标的高CPU使用率,java,swing,system-tray,Java,Swing,System Tray,在我使用的一个简单的swing应用程序中 代码正常,创建托盘,设置图标,添加事件。但当应用程序使用系统托盘执行时,CPU使用率高达50%。如果未使用系统托盘代码,则CPU使用情况良好。如何解决这个问题 编辑: 下面是代码,虽然不是完整的源代码,但主要的两个java文件如下: package ui; import java.awt.BorderLayout; import java.awt.Component; import java.awt.MenuItem; import java.awt.
package ui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import msg.HighlightInterface;
/**
*
* @author user
*/
public class Window extends JFrame implements HighlightInterface {
private HashMap<Integer, ChatPanel> tabMap;
private About aboutDialog;
private Window thisWindow;
private TrayIcon trayIcon;
private PopupMenu trayMenu;
@Override
public void messageReceived(String text) {
if (trayIcon != null && !isFocused()) {
trayIcon.displayMessage("Msg", text, TrayIcon.MessageType.INFO);
}
}
private class ServerDaemon extends Thread {
private ServerSocket serverSocket;
@Override
public void run() {
try {
serverSocket = new ServerSocket(7777);
System.out.println("Listening for connections : ");
while (true) {
Socket client;
while ((client = serverSocket.accept()) != null) {
ChatPanel chatPanel = new ChatPanel(client);
chatPanel.addHighlightListener(thisWindow);
tabPane.add(client.getInetAddress().toString(), chatPanel);
System.out.println(client.getRemoteSocketAddress() + " -> connected.");
}
}
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog("This application is already running or error while initialization.");
System.exit(-1);
}
}
}
private NewDialog newDialog;
/**
* Creates new form Window
*/
public Window() {
thisWindow = this;
initComponents();
setComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tabPane = new JTabbedPane();
menuBar = new JMenuBar();
fileMenu = new JMenu();
newMenuItem = new JMenuItem();
closeMenuItem = new JMenuItem();
exitMenuItem = new JMenuItem();
helpMenu = new JMenu();
aboutMenuItem = new JMenuItem();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(tabPane, BorderLayout.CENTER);
fileMenu.setText("Msg");
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
newMenuItem.setText("New");
newMenuItem.setToolTipText("New chat.");
newMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
newMenuItemActionPerformed(evt);
}
});
fileMenu.add(newMenuItem);
closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK));
closeMenuItem.setText("Close");
closeMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
closeMenuItemActionPerformed(evt);
}
});
fileMenu.add(closeMenuItem);
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_MASK));
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
helpMenu.setText("Help");
aboutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
aboutMenuItem.setText("About");
aboutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
aboutMenuItemActionPerformed(evt);
}
});
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
pack();
}// </editor-fold>//GEN-END:initComponents
private void newMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_newMenuItemActionPerformed
showNewDialog();
}//GEN-LAST:event_newMenuItemActionPerformed
private void closeMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed
closeWindow();
}//GEN-LAST:event_closeMenuItemActionPerformed
private void exitMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
closeApp();
}//GEN-LAST:event_exitMenuItemActionPerformed
private void aboutMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
showAbout();
}//GEN-LAST:event_aboutMenuItemActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final Window window = new Window();
window.new ServerDaemon().start();
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
window.setVisible(true);
}
});
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog(ex.getMessage());
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private JMenuItem aboutMenuItem;
private JMenuItem closeMenuItem;
private JMenuItem exitMenuItem;
private JMenu fileMenu;
private JMenu helpMenu;
private JMenuBar menuBar;
private JMenuItem newMenuItem;
private JTabbedPane tabPane;
// End of variables declaration//GEN-END:variables
private void setComponents() {
try {
trayMenu = new PopupMenu();
MenuItem closeMenuItem = new MenuItem("Exit");
closeMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeApp();
}
});
trayMenu.add(closeMenuItem);
trayIcon = new TrayIcon(ImageIO.read(Window.class.getResource("/res/chat.png")), "Msg", trayMenu);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) {
setState(JFrame.NORMAL);
setVisible(true);
toFront();
}
}
});
if (SystemTray.isSupported()) {
SystemTray.getSystemTray().add(trayIcon);
}
newDialog = new NewDialog(this);
aboutDialog = new About(this);
tabMap = new HashMap<Integer, ChatPanel>();
addWindowListener(new WindowAdapter() {
@Override
public void windowIconified(WindowEvent e) {
setVisible(false);
}
});
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setTitle("Msg");
setSize(400, 380);
setLocationRelativeTo(null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void showNewDialog() {
newDialog.setVisible(true);
}
public void connectToClient(String ip, String name) {
if (name.length() == 0) {
name = System.getProperty("user.name");
}
try {
Socket socket = new Socket(ip, 7777);
ChatPanel chatPanel = new ChatPanel(socket);
tabPane.add(ip, chatPanel);
tabMap.put(tabPane.indexOfComponent(chatPanel), chatPanel);
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog("Connection not established !, May be this application "
+ "is not running in other system or it may be a network error !");
}
}
private void closeWindow() {
if (tabPane.getTabCount() > 0) {
Component component = tabPane.getSelectedComponent();
if (component instanceof ChatPanel) {
((ChatPanel) component).closeConnection();
tabPane.remove(tabPane.getSelectedIndex());
}
}
}
private void showAbout() {
aboutDialog.setVisible(true);
}
private void closeApp() {
System.exit(0);
}
}
packageui;
导入java.awt.BorderLayout;
导入java.awt.Component;
导入java.awt.MenuItem;
导入java.awt.PopupMenu;
导入java.awt.SystemTray;
导入java.awt.TrayIcon;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.awt.event.InputEvent;
导入java.awt.event.KeyEvent;
导入java.awt.event.MouseAdapter;
导入java.awt.event.MouseEvent;
导入java.awt.event.WindowAdapter;
导入java.awt.event.WindowEvent;
导入java.net.ServerSocket;
导入java.net.Socket;
导入java.util.HashMap;
导入javax.imageio.imageio;
导入javax.swing.JFrame;
导入javax.swing.JMenu;
导入javax.swing.JMenuBar;
导入javax.swing.JMenuItem;
导入javax.swing.JTabbedPane;
导入javax.swing.KeyStroke;
导入javax.swing.UIManager;
导入javax.swing.WindowConstants;
导入msg.HighlightInterface;
/**
*
*@author用户
*/
公共类窗口扩展JFrame实现HighlightInterface{
私有HashMap-tabMap;
私密的关于阿伯塔洛;
私人窗口;
私人运输公司;
私有弹出菜单菜单;
@凌驾
已接收公共无效消息(字符串文本){
if(trayIcon!=null&&!isFocused()){
trayIcon.displayMessage(“Msg”,文本,trayIcon.MessageType.INFO);
}
}
私有类ServerDaemon扩展线程{
私有服务器套接字服务器套接字;
@凌驾
公开募捐{
试一试{
serverSocket=新的serverSocket(7777);
System.out.println(“侦听连接:”);
while(true){
套接字客户端;
而((client=serverSocket.accept())!=null){
ChatPanel ChatPanel=新的ChatPanel(客户端);
chatPanel.addHighlightListener(此窗口);
tabPane.add(client.getInetAddress().toString(),chatPanel);
System.out.println(client.getRemoteSocketAddress()+“->已连接”);
}
}
}捕获(例外情况除外){
例如printStackTrace();
Dialogs.batherRorDialog(“此应用程序已在运行或初始化时出错”);
系统退出(-1);
}
}
}
私有NewDialog NewDialog;
/**
*创建新窗体窗口
*/
公共窗口(){
这个窗口=这个;
初始化组件();
setComponents();
}
@抑制警告(“未选中”)
////GEN-BEGIN:初始化组件
私有组件(){
tabPane=新的JTabbedPane();
menuBar=newjmenubar();
fileMenu=newjmenu();
newMenuItem=new JMenuItem();
closeMenuItem=new JMenuItem();
exitMenuItem=新的JMenuItem();
helpMenu=newjmenu();
aboutMenuItem=新JMenuItem();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(选项卡窗格,BorderLayout.CENTER);
fileMenu.setText(“Msg”);
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,InputEvent.CTRL_MASK));
newMenuItem.setText(“新”);
setToolTipText(“新聊天”);
newMenuItem.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
执行的新菜单操作(evt);
}
});
fileMenu.add(newMenuItem);
closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W,InputEvent.CTRL_MASK));
closeMenuItem.setText(“关闭”);
addActionListener(新建ActionListener()){
已执行的公共无效操作(操作事件evt){
已执行的CloseMenuItemAction(evt);
}
});
fileMenu.add(closeMenuItem);
setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,InputEvent.ALT_MASK));
exitMenuItem.setText(“退出”);
exitMenuItem.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
菜单栏。添加(文件菜单);
helpMenu.setText(“帮助”);
aboutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1,0));
aboutMenuItem.setText(“关于”);
aboutMenuItem.addActionListener(新ActionListener(){
已执行的公共无效操作(操作事件evt){
关于已执行的操作(evt);
}
});
helpMenu.add(关于菜单项);
菜单栏。添加(帮助菜单);
setJMenuBar(菜单栏);
包装();
}////GEN-END:initComponents
private void newMenuItemActionPerformed(ActionEvent evt){//GEN-FIRST:event\u newMenuItemActionPerformed
showNewDialog();
}//GEN-LAST:已执行事件\u newMenuItemAction
私有无效closeMenuItemActionPerformed(ActionEvent evt){//GEN-FIRST:event\u closeMenuItemActionPerformed
关闭窗口();
}//GEN-LAST:已执行事件\关闭菜单操作
私有无效exitMenuItemActionPerformed(ActionEvent evt){//GEN-FIRST:event\u exitMenuItemActionPerformed
closeApp();
}//GEN-LAST:已执行事件\u exitMenuItemAction
private void aboutMenuItemActionPerformed(ActionEvent evt){//GEN-FIRST:event_aboutMenuItemActionPerformed
炫耀();
}//GEN-LAST:已执行的关于菜单项操作的事件
/**
*@param指定命令行参数
*/
公共静态空间
package ui;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.SystemTray;
import java.awt.TrayIcon;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.InputEvent;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashMap;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JTabbedPane;
import javax.swing.KeyStroke;
import javax.swing.UIManager;
import javax.swing.WindowConstants;
import msg.HighlightInterface;
/**
*
* @author user
*/
public class Window extends JFrame implements HighlightInterface {
private HashMap<Integer, ChatPanel> tabMap;
private About aboutDialog;
private Window thisWindow;
private TrayIcon trayIcon;
private PopupMenu trayMenu;
@Override
public void messageReceived(String text) {
if (trayIcon != null && !isFocused()) {
trayIcon.displayMessage("Msg", text, TrayIcon.MessageType.INFO);
}
}
private class ServerDaemon extends Thread {
private ServerSocket serverSocket;
@Override
public void run() {
try {
serverSocket = new ServerSocket(7777);
System.out.println("Listening for connections : ");
while (true) {
Socket client;
while ((client = serverSocket.accept()) != null) {
ChatPanel chatPanel = new ChatPanel(client);
chatPanel.addHighlightListener(thisWindow);
tabPane.add(client.getInetAddress().toString(), chatPanel);
System.out.println(client.getRemoteSocketAddress() + " -> connected.");
}
}
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog("This application is already running or error while initialization.");
System.exit(-1);
}
}
}
private NewDialog newDialog;
/**
* Creates new form Window
*/
public Window() {
thisWindow = this;
initComponents();
setComponents();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
tabPane = new JTabbedPane();
menuBar = new JMenuBar();
fileMenu = new JMenu();
newMenuItem = new JMenuItem();
closeMenuItem = new JMenuItem();
exitMenuItem = new JMenuItem();
helpMenu = new JMenu();
aboutMenuItem = new JMenuItem();
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
getContentPane().add(tabPane, BorderLayout.CENTER);
fileMenu.setText("Msg");
newMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, InputEvent.CTRL_MASK));
newMenuItem.setText("New");
newMenuItem.setToolTipText("New chat.");
newMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
newMenuItemActionPerformed(evt);
}
});
fileMenu.add(newMenuItem);
closeMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_W, InputEvent.CTRL_MASK));
closeMenuItem.setText("Close");
closeMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
closeMenuItemActionPerformed(evt);
}
});
fileMenu.add(closeMenuItem);
exitMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4, InputEvent.ALT_MASK));
exitMenuItem.setText("Exit");
exitMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
exitMenuItemActionPerformed(evt);
}
});
fileMenu.add(exitMenuItem);
menuBar.add(fileMenu);
helpMenu.setText("Help");
aboutMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0));
aboutMenuItem.setText("About");
aboutMenuItem.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent evt) {
aboutMenuItemActionPerformed(evt);
}
});
helpMenu.add(aboutMenuItem);
menuBar.add(helpMenu);
setJMenuBar(menuBar);
pack();
}// </editor-fold>//GEN-END:initComponents
private void newMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_newMenuItemActionPerformed
showNewDialog();
}//GEN-LAST:event_newMenuItemActionPerformed
private void closeMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_closeMenuItemActionPerformed
closeWindow();
}//GEN-LAST:event_closeMenuItemActionPerformed
private void exitMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_exitMenuItemActionPerformed
closeApp();
}//GEN-LAST:event_exitMenuItemActionPerformed
private void aboutMenuItemActionPerformed(ActionEvent evt) {//GEN-FIRST:event_aboutMenuItemActionPerformed
showAbout();
}//GEN-LAST:event_aboutMenuItemActionPerformed
/**
* @param args the command line arguments
*/
public static void main(String args[]) {
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
final Window window = new Window();
window.new ServerDaemon().start();
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
window.setVisible(true);
}
});
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog(ex.getMessage());
}
}
// Variables declaration - do not modify//GEN-BEGIN:variables
private JMenuItem aboutMenuItem;
private JMenuItem closeMenuItem;
private JMenuItem exitMenuItem;
private JMenu fileMenu;
private JMenu helpMenu;
private JMenuBar menuBar;
private JMenuItem newMenuItem;
private JTabbedPane tabPane;
// End of variables declaration//GEN-END:variables
private void setComponents() {
try {
trayMenu = new PopupMenu();
MenuItem closeMenuItem = new MenuItem("Exit");
closeMenuItem.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
closeApp();
}
});
trayMenu.add(closeMenuItem);
trayIcon = new TrayIcon(ImageIO.read(Window.class.getResource("/res/chat.png")), "Msg", trayMenu);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
if (e.getButton() == MouseEvent.BUTTON1 && e.getClickCount() == 1) {
setState(JFrame.NORMAL);
setVisible(true);
toFront();
}
}
});
if (SystemTray.isSupported()) {
SystemTray.getSystemTray().add(trayIcon);
}
newDialog = new NewDialog(this);
aboutDialog = new About(this);
tabMap = new HashMap<Integer, ChatPanel>();
addWindowListener(new WindowAdapter() {
@Override
public void windowIconified(WindowEvent e) {
setVisible(false);
}
});
setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);
setTitle("Msg");
setSize(400, 380);
setLocationRelativeTo(null);
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void showNewDialog() {
newDialog.setVisible(true);
}
public void connectToClient(String ip, String name) {
if (name.length() == 0) {
name = System.getProperty("user.name");
}
try {
Socket socket = new Socket(ip, 7777);
ChatPanel chatPanel = new ChatPanel(socket);
tabPane.add(ip, chatPanel);
tabMap.put(tabPane.indexOfComponent(chatPanel), chatPanel);
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog("Connection not established !, May be this application "
+ "is not running in other system or it may be a network error !");
}
}
private void closeWindow() {
if (tabPane.getTabCount() > 0) {
Component component = tabPane.getSelectedComponent();
if (component instanceof ChatPanel) {
((ChatPanel) component).closeConnection();
tabPane.remove(tabPane.getSelectedIndex());
}
}
}
private void showAbout() {
aboutDialog.setVisible(true);
}
private void closeApp() {
System.exit(0);
}
}
package ui;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import javax.swing.GroupLayout;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.LayoutStyle;
import msg.HighlightInterface;
/**
*
* @author user
*/
public class ChatPanel extends JPanel {
private static ArrayList<HighlightInterface> highlightListeners;
static{
highlightListeners=new ArrayList<HighlightInterface>();
}
public static void addHighlightListener(HighlightInterface h){
highlightListeners.add(h);
}
private class EnterListener extends KeyAdapter {
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyChar() == KeyEvent.VK_ENTER && msg.getText().length() > 0) {
sendMsg(msg.getText());
inbox.setText(inbox.getText() + "me : " + msg.getText());
msg.setText("");
}
}
}
private Socket socket;
private DataInputStream in;
private DataOutputStream out;
private boolean showError = true;
/**
* Creates new form ChatPanel
*/
public ChatPanel(Socket socket) {
this.socket = socket;
initComponents();
setComponents();
}
private void setComponents() {
try {
if (socket != null) {
in = new DataInputStream(socket.getInputStream());
out = new DataOutputStream(socket.getOutputStream());
new Thread() {
@Override
public void run() {
try {
String text = null;
while (true) {
while (in.available() > 0) {
text = in.readUTF();
if (text != null) {
text = socket.getInetAddress().toString() + " : " + text;
inbox.setText(inbox.getText() + text);
informToAll(text);
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
if (showError) {
Dialogs.showErrorDialog(ex.getMessage());
}
}
}
}.start();
}
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog(ex.getMessage());
}
inbox.setEditable(false);
msg.addKeyListener(new EnterListener());
msg.requestFocus();
}
private void sendMsg(String text) {
try {
if (out != null) {
out.writeUTF(text);
}
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog("I can't send your message :(");
}
}
public void closeConnection() {
try {
if (socket != null) {
showError = false;
in.close();
out.close();
socket.close();
System.out.println("connection closed!");
}
} catch (Exception ex) {
ex.printStackTrace();
Dialogs.showErrorDialog(ex.getMessage());
}
}
private void informToAll(String text){
if(highlightListeners!=null){
for(HighlightInterface h :highlightListeners)
h.messageReceived(text);
}
}
/**
* This method is called from within the constructor to initialize the form.
* WARNING: Do NOT modify this code. The content of this method is always
* regenerated by the Form Editor.
*/
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
jScrollPane1 = new JScrollPane();
inbox = new ChatPane();
jScrollPane2 = new JScrollPane();
msg = new ChatPane();
jScrollPane1.setViewportView(inbox);
jScrollPane2.setViewportView(msg);
GroupLayout layout = new GroupLayout(this);
this.setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addGroup(layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, GroupLayout.DEFAULT_SIZE, 299, Short.MAX_VALUE)
.addComponent(jScrollPane2))
.addContainerGap())
);
layout.setVerticalGroup(
layout.createParallelGroup(GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addContainerGap()
.addComponent(jScrollPane1, GroupLayout.PREFERRED_SIZE, 191, GroupLayout.PREFERRED_SIZE)
.addPreferredGap(LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jScrollPane2, GroupLayout.DEFAULT_SIZE, 52, Short.MAX_VALUE)
.addContainerGap())
);
}// </editor-fold>//GEN-END:initComponents
// Variables declaration - do not modify//GEN-BEGIN:variables
public ChatPane inbox;
private JScrollPane jScrollPane1;
private JScrollPane jScrollPane2;
public ChatPane msg;
// End of variables declaration//GEN-END:variables
}