#node.js #electron #electron-packager
#node.js #electron #электронный упаковщик
Вопрос:
Недавно я создал приложение с серверной частью Java и интерфейсом React, и я использовал Electron и некоторые функции Node для объединения приложения и создания для него настольного приложения. В принципе, я решил использовать Java для некоторых библиотек, специфичных для Java, которые мне были нужны. Приложение будет работать на порту 8080, при этом материалы React / JS будут обслуживаться из статической папки, а оболочка Electron будет использовать некоторые библиотеки узлов для запуска процесса Java, а затем через несколько секунд подключится к localhost: 8080.
Это работает как шарм примерно в половине случаев, а другая половина вместо этого показывает мне белый экран без ошибок! Я отлаживал это бесчисленное количество раз, и единственный способ исправить это — принудительно перезагрузить страницу Chromium, которая иногда работает, а иногда нет. Очевидно, что это неприемлемо для пользователей в моем приложении. Проблема в том, что у меня закончились идеи относительно того, что может быть причиной этой проблемы.
Вот мой main.js для приложения electron
const {app, BrowserWindow} = require('electron')
function createWindow () {
try {
var jarPath = './app.jar';
var kill = require('tree-kill');
var child = require('child_process').spawn('java', ['-jar', jarPath, '']);
let win = new BrowserWindow({width: 1000, height: 730});
setTimeout(function() {
win.loadURL('http://localhost:8080/index.html');
}, 2000);
console.log("PID: " child.pid);
win.on('closed', function () {
kill(child.pid);
mainWindow = null
}
)
} catch(e) {
console.log(e);
}
}
app.on('ready', createWindow)
Комментарии:
1. Кажется излишне сложным для размещения на Java и обслуживания через electron (противоречит всей цели использования electron). Также использование
setTimeout
в производственном приложении для этой цели довольно грубо. Ваша ошибка, скорее всего, лежит именно там. Возможно, сервер Java еще не запущен, когда вы переходите к localhost. Может быть, прослушайтеprocess.stdout
ваше java-приложение для aready
и только затем перейдите на localhost, а не через тайм-аут