У меня есть следующий код, чтобы проверить, запущен ли другой экземпляр приложения
public class Application {
private static final int PORT = 8586;
private static ServerSocket s;
static {
try {
s = new ServerSocket(PORT, 10, InetAddress.getLocalHost());
} catch (Exception ex) {
ex.printStackTrace();
informAppRunning();
}
}
public static void informAppRunning() {
JOptionPane.showMessageDialog(null, "App already running");
System.exit(0);
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
DatabaseConnection.initDB();
GUIMain main = new GUIMain();
main.setLocationRelativeTo(null);
main.setVisible(true);
}
});
}
}
Экземпляр уже запущен, создал и установил TrayIcon.Я пытался заставить TrayIcon более старого экземпляра выполнить этот метод перед «System.exit (0);»
public static void sysTrayOldInstance() {
System.out.println("sysTrayOldInstance();");
SystemTray systemTray = SystemTray.getSystemTray();
TrayIcon[] icons = systemTray.getTrayIcons();
for (TrayIcon icon : icons) {
System.out.println(icon);
}
}
Но он ничего не показывает рядом с «sysTrayOldInstance ();».То, что я хочу сделать, это просто: если экземпляр приложения уже запущен, установите фокус на jFrame, если он видим, и, если он уже удален (нажав X), затем выполните ActionListener TrayIcon этого более старого экземпляра, который:
ActionListener actionListener = new ActionListener() {
public void actionPerformed(ActionEvent e) {
jFrame.setVisible(true);
}
};
Кто-нибудь знает, как это сделать, или даже путь, по которому я могу пойти ... Кроме того, если кто-нибудь знает, этот порт 8586 уже используется общими программами, пожалуйста, дайте мне знать.