Je travaille sur un plugin JXBrowser dans une application OSGi pour le travail, mais quand je mets à jour le plug-in-je obtenir cette erreur:JXBrowser plusieurs StartIPCTasks dans l'application OSGi. Comment réinitialiser le navigateur correctement?
JXBrowser multiple instance error
Je ne peux trouver aucune information sur le StartIPCTask, mais je savoir qu'il est exécuté lorsqu'un navigateur est instancié. J'ai essayé de spécifier toujours BrowserContext avec le même chemin, mais j'ai la même erreur. J'ai également essayé de disposer de l'objet du navigateur (et éventuellement exécuter BrowserCore.shutdown()) lorsque l'application est mise à jour, mais j'ai la même erreur ou tout se bloque.
Existe-t-il un moyen spécial de récupérer les navigateurs et de s'assurer que StartIPCTask n'est implémenté qu'une seule fois? Puis-je spécifier lequel est indéfini par programmation? Merci!
EDIT: Malheureusement, je ne peux pas poster tout mon code, mais l'essentiel du projet est JXBrowser dans une encapsuler application. Ainsi, lorsque l'application est créée, elle appelle une fonction start
, qui contient:
try {
browser = new Browser();
browserView = new BrowserView(browser);
browser.addScriptContextListener(new ScriptContextAdapter() {
@Override
public void onScriptContextCreated(ScriptContextEvent event) {
Browser browser = event.getBrowser();
JSValue window = browser.executeJavaScriptAndReturnValue("window");
window.asObject().setProperty("browser", browser);
}
});
} catch (IPCException exception) {
System.out.println("Must restart to use browser");
// This executes after a 1 minute delay (shown below)
}
Avant l'application est réinstallée pour une mise à jour, la méthode shutdown()
est appelée, qui est en ce moment juste:
if (browser != null)
browser.dispose();
Selon la documentation, puisque je suis sur Mac OSX, Browsers et BrowserContexts doivent être éliminés manuellement. Mais l'ajout de l'une ou l'autre fonction n'a aucun effet.
Lorsque l'application est alors rechargée, la méthode de démarrage est exécuté à nouveau et la ligne de déclaration browser
échoue avec l'erreur suivante:
objc[71371]: Class StartIPCTask is implemented in both
/path/to/karaf_data/tmp/jxbrowser-chromium-55.0.2883.87.6.14.2/data/Temp/libjxbrowser-common64-fb50af13-9fbf-4fe0-a9cf-0a1f9d1201a7.dylib (0x144e95610)
and /path/to/karaf_data/tmp/jxbrowser-chromium-55.0.2883.87.6.14.2/data/Temp/libjxbrowser-common64-29e240a5-75e5-4ece-9fe7-33dd8b3245cb.dylib (0x180db9610).
One of the two will be used. Which one is undefined.
Mais il n'y a pas possibilité de spécifier qui est définie. Donc, à la place, il reste gelé pendant ~ 1 minute, puis le code continue avec browser
comme nulle.
Devrais-je spécifier un BrowserContext autre que BrowserContext.defaultContext()? Comment informer BrowserCore de quitter sans quitter l'application parente et puis-je créer un nouveau navigateur?