Study & Project ✏️/Bug & Report 🐞

[Electron] Uncaught Exception: TypeError: Object has been destroyed at IpcMainImpl 에러 해결

JM 2022. 11. 30. 04:35
반응형

 

😎 Introduction

아마도 이 글을 보는 당신은 어느 정도 수준급 이상의 앱을 만들고 있을 거라고 생각한다.

그리고 이 문제는 멀티윈도우에서 나타났을 거라고 생각한다.

 

나의 작은 고생이 누군가에게는 빠른 해결이 되길 바라며!!!

 

🐞 BUG

오류를 해석하자면 메인프로세스에서 오류가 났는데,

Object가 파괴됐었기 때문에 메인 프로세스에서 실행할 수 없다고 하는 것이다.

 

🗝️ Solution

기존 방법 같은 경우 우측 상단의 해당 x버튼을 누르거나

별도로 선언한 ipcRenderer.send()를 통해 Main process로 이벤트를 전달하고,

메인 프로세스에서 해당 window.close()를 통해 종료시켰을 것이다.

하지만, 해당 방법을 사용해도 동일한 오류가 발생했다.

 

추가적으로 구글링 해 본 여러 솔루션들이 제시하는 방법들이었던 이런 방법들도 null Exception 오류를 내뱉었다.

ipcMain.on('close-window2', (event, res) => {
    window2.close();
    window2 = null;
  });

 

그래서 결국 해당 객체를 완전히 종료하지 않고 숨겨놓는 window2.hide() 메서드를 사용했고,

성공적으로 멀티 윈도우를 켰다가 껐다가 할 수 있게 되었다.

// Example
ipcMain.on('close-window2', (event, res) => {
    window2.hide();
  });

 


📚 Think More

일렉트론을 선택한 이유중의 하나가 바로 기존 앱의 diversity와 depth가 충분하다고 판단했기 때문이었다.

그런데 일렉트론의 representive app들 중 vscode, atom,  discord... 들이 multi window를 사용하지 않는다는 공통점을 가지고 있다는 것을 깨달았다.

그 깊은 이유를 알지는 못하지만, 사용하지 않는 이유(API management, Thread, state issue, etc)를 조금은 이해할 수 있을 것 같다.