0

我正在熟悉 NetBeans 并使用 Java 完成我的第一个教程。

我没有看到我的系统托盘图标出现,我怀疑我将图标放置在项目文件中的错误位置。这是我在 SysTray.java 中的代码:

package systray;

import java.awt.*;

public class SysTray {

    public static void main(String[] args) {

        Runnable runner;
        runner = new Runnable() {

    public void run() {
      if (SystemTray.isSupported()) {
          SystemTray tray = SystemTray.getSystemTray();
          Image image = Toolkit.getDefaultToolkit().getImage("MyIcon.png");
          PopupMenu popup = new PopupMenu();
          MenuItem item = new MenuItem("A MenuItem");
          popup.add(item);
          TrayIcon trayIcon = new TrayIcon(image, "The Tip Text", popup);
          try {
            tray.add(trayIcon);
          } catch (AWTException e) {
            System.err.println("Can't add to tray");
          }
        } else {
          System.err.println("Tray unavailable");
        }

      }
    };
    EventQueue.invokeLater(runner);
  }
}

我将“MyIcon.png”放在与 SysTray.java(主)相同的目录中。但我实际上猜想那是我应该放置它的地方。

这是目录结构:

系统托盘/

  • 源包/ - systray/ - SysTray.java
  • 源包/ - 系统托盘/ - MyIcon.png
  • 图书馆/

我在系统托盘中看到图标的空白区域,当我将鼠标悬停时,我确实看到了“提示文本”。但没有图标。

我也没有收到来自 NetBeans 的关于丢失图像的错误。所以,我被困住了

4

2 回答 2

0

您可以通过指定图像的绝对路径来使您的方式工作,例如“C:\MyProjects\projectname\packagename\MyIcon.png”

您想要的是将图像作为资源加载,而不是直接从文件系统加载(当您部署为 jar 时)。像这样:

String imageLocation = "/systray/MyIcon.png";
URL imageURL = this.getClass().getResource(imageLocation);
Image image = Toolkit.getDefaultToolkit().getImage(imageURL);

有关如何添加资源文件夹(用于图像、音频等)的信息,请参阅如何从 NetBeans 中的“资源”文件夹中正确获取图像。

于 2012-11-11T18:47:44.110 回答
0

图像文件夹 - 使用 NetBeans IDE 12.x

在“resources”文件夹中保存图像,例如“Sample.png”,该文件夹将与“java”文件夹在同一层次结构中。(构建项目时会自动提取资源文件夹内容,并与编译的类一起发送到jar文件。)jar文件将存储在父项目文件夹下的'target'文件夹中。

接下来将资源文件夹的所有内容手动复制到项目文件夹中,就像项目文件夹中的文件一样。(这些将用于 IDE 中的代码测试)

用于在代码中编码图像访问,例如

img = ImageIO.read(new File("Sample.png"));  

只需键入所有需要的图像文件名。构建项目,您将在 jar 文件的“target”文件夹中看到包含在 java 类中的图像文件。打开 jar 文件以查看已编译的类和图像。

使用 java 命令“java classname”正常执行类文件。

要从命令行运行类文件,首先将 jar 解压缩到计算机上的任何位置,然后 cd 到该文件夹​​。***确保在更新或替换资源后始终将资源文件夹内容直接复制到项目文件夹***

这些文件夹之外的任何资源都需要额外的代码来处理计算机中这些位置的绝对路径。

于 2021-04-21T18:48:17.857 回答