Javascript NodeJS-电子托盘图标在一分钟后消失

Javascript NodeJS-电子托盘图标在一分钟后消失,javascript,node.js,electron,trayicon,Javascript,Node.js,Electron,Trayicon,老实说,我不知道发生了什么事 我一直在关注图标,几分钟后它就消失了。不,它不会指向时钟附近的箭头: 这是我的图标显示(红色爆炸): 我不知道如何调试图标是否存在但为空,或者是否存在触发其隐藏的事件,或者托盘进程是否因错误而自行关闭。控制台或我的应用程序中不会发生任何事情 有人能帮忙吗?下面是我的整个index.js: const {app, BrowserWindow, Tray, Menu} = require('electron'); const path = require('path

老实说,我不知道发生了什么事

我一直在关注图标,几分钟后它就消失了。不,它不会指向时钟附近的箭头:

这是我的图标显示(红色爆炸):

我不知道如何调试图标是否存在但为空,或者是否存在触发其隐藏的事件,或者托盘进程是否因错误而自行关闭。控制台或我的应用程序中不会发生任何事情

有人能帮忙吗?下面是我的整个
index.js

const {app, BrowserWindow, Tray, Menu} = require('electron');
const path = require('path');

var win = '',
    iconpath = path.join(__dirname, '/libs/img/icon.ico');

// Create the browser window
function createWindow () {

  // BrowserWindow size
  win = new BrowserWindow({
    width: 800,
    height: 720,
    webPreferences: {
      nodeIntegration: true
    }
  });

  // tray menu
  var contextMenu = Menu.buildFromTemplate([
    {
        label: 'Show app', click: function () {
            win.show()
        }
    },
    {
        label: 'Quit', click: function () {
            app.isQuiting = true;
            app.quit();
        }
    }
  ]);

  // Creates tray menu with tray icon
  var appIcon = new Tray(iconpath);
  // Define menu
  appIcon.setContextMenu(contextMenu);

  win.on('close', function () {
    app.isQuiting = true;
    app.quit();
  });

  // Load the index.html of the app
  win.loadFile('./view/index.html');
}

app.on('ready', createWindow);

这是一个众所周知的与垃圾收集相关的问题,在页面中提到:

因此,一个快速解决方法是将
appIcon
变量的声明从
createWindow
函数中向上移动,在
win
变量旁边,例如:

const {app, BrowserWindow, Tray, Menu} = require('electron');
const path = require('path');

var win = '',
    appIcon = null,
    iconpath = path.join(__dirname, '/libs/img/icon.ico');

// Create the browser window
function createWindow () {

  // BrowserWindow size
  win = new BrowserWindow({
    width: 800,
    height: 720,
    webPreferences: {
      nodeIntegration: true
    }
  });

  // tray menu
  var contextMenu = Menu.buildFromTemplate([
    {
        label: 'Show app', click: function () {
            win.show()
        }
    },
    {
        label: 'Quit', click: function () {
            app.isQuiting = true;
            app.quit();
        }
    }
  ]);

  // Creates tray menu with tray icon
  appIcon = new Tray(iconpath);
  // Define menu
  appIcon.setContextMenu(contextMenu);

  win.on('close', function () {
    app.isQuiting = true;
    app.quit();
  });

  // Load the index.html of the app
  win.loadFile('./view/index.html');
}

app.on('ready', createWindow);

我也有同样的问题,但我找到了解决办法。 当用来存储托盘的
tray
变量被垃圾回收时,就会发生这种情况

只需将变量设置为全局变量,就可以消除这种情况

在您的情况下,从
createWindow
函数中创建
appIcon
变量,如下所示:

让appIcon=null;
然后按如下方式指定托盘对象:

appIcon=新托盘(iconpath);
参考: