Итак, я делаю приложение Auto Clicker, которое работает в фоновом режиме с JnativeHook в подносе, которое может открыть приложение java.awt, когда нажимает значок, и вся эта часть работает при запуске с Vscode с запуском Java. Когда я упаковал проект с помощью MVN Clean Package, чтобы получить заштрихованную исполняемую банку, изображение значка для приложения выглядит странно. (Он работал нормально при запуске от VSCODE) Я также попробовал приложение EXE в целевой папке, но я получил те же результаты. Значок в pom.xml, так как он уже был определен в лоторе части файлов Java, но я не видел никаких изменений. Maven Project Picture < /p>
my tray.java -файл, где я обрабатываю лоток и устанавливаю изображение значка для приложения, которое отлично работает при запуске из основного файла: < /p>
package com.autoclicker;
import java.awt.*;
import java.awt.event.*;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
public class Tray {
private TrayIcon trayIcon;
private App app;
private SettingsManager settingsManager;
public Tray() {
setupTray();
app = new App();
settingsManager = new SettingsManager();
// Initialize global key listener using current settings
new KeyListener();
}
/**
* Sets up the system tray icon and its associated context menu.
* If system tray is not supported, this method does nothing.
* The system tray icon is set to the image located at
* src/main/res/img/icon.png.
* The context menu has one item: "Exit", which exits the application
* and unregisters the native hook.
*/
private void setupTray() {
if (!SystemTray.isSupported()) {
System.err.println("System tray is not supported.");
return;
}
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("src\\main\\res\\img\\icon.png");
trayIcon = new TrayIcon(image, "Auto Clicker");
trayIcon.setImageAutoSize(true);
trayIcon.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
// Left-click to open the settings window
if (e.getButton() == MouseEvent.BUTTON1) {
app.showSettingsWindow();
}
}
});
PopupMenu popup = new PopupMenu();
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> {
try {
GlobalScreen.unregisterNativeHook();
} catch (NativeHookException ex) {
ex.printStackTrace();
}
System.exit(0);
});
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("TrayIcon could not be added.");
e.printStackTrace();
}
}
}
< /code>
my pom.xml, где я установил значок для проекта (я не очень много знаю о pom.xml): < /p>
xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
com.autoclicker
auto-clicker
1.0-SNAPSHOT
auto-clicker
http://www.example.com
UTF-8
1.8
1.8
junit
junit
4.11
test
com.1stleg
jnativehook
2.1.0
com.google.code.gson
gson
2.12.1
maven-clean-plugin
3.1.0
maven-resources-plugin
3.0.2
maven-compiler-plugin
3.8.0
maven-surefire-plugin
2.22.1
maven-jar-plugin
3.0.2
maven-install-plugin
2.5.2
maven-deploy-plugin
2.8.2
maven-site-plugin
3.7.1
maven-project-info-reports-plugin
3.0.0
org.apache.maven.plugins
maven-shade-plugin
3.2.4
package
shade
true
shaded
com.autoclicker.Main
com.akathist.maven.plugins.launch4j
launch4j-maven-plugin
2.5.3
l4j-wrapper
package
launch4j
${project.build.directory}/${project.build.finalName}-shaded.jar
${project.build.directory}/${project.build.finalName}.exe
gui
.
src/main/res/img/icon.ico
1.8.0
< /code>
Основной файл просто запускает файл Tray.java, который запускает файл app.java при нажатии на системный лоток: < /p>
package com.autoclicker;
import javax.swing.SwingUtilities;
public class Main {
/**
* Main entry point of the application.
*
* This method creates a new instance of the Tray class, which sets up the
* system tray and the settings window.
*
* @param args Command line arguments (not used)
*/
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> new Tray());
}
}
Вот репо: https://github.com/jeromeydynamics/auto-clicker-app
минимальный воспроизводимый пример
import java.awt.*;
import java.awt.event.*;
import org.jnativehook.GlobalScreen;
import org.jnativehook.NativeHookException;
public class Tray {
public static void main(String[] args) {
SystemTray tray = SystemTray.getSystemTray();
Image image = Toolkit.getDefaultToolkit().getImage("src\\main\\res\\img\\icon.png");
TrayIcon trayIcon = new TrayIcon(image, "Auto Clicker");
trayIcon.setImageAutoSize(true);
PopupMenu popup = new PopupMenu();
MenuItem exitItem = new MenuItem("Exit");
exitItem.addActionListener(e -> {
try {
GlobalScreen.unregisterNativeHook();
} catch (NativeHookException ex) {
ex.printStackTrace();
}
System.exit(0);
});
popup.add(exitItem);
trayIcon.setPopupMenu(popup);
try {
tray.add(trayIcon);
} catch (AWTException e) {
System.err.println("TrayIcon could not be added.");
e.printStackTrace();
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... icon-image
Изображение иконы искаженного подноса ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Не получаю полезную нагрузку в пакете от подноса уведомлений. Когда приложение убито
Anonymous » » в форуме Android - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-