From a0c619a747ea3c09b63a0d449f83bb6053683034 Mon Sep 17 00:00:00 2001 From: huanghongxun Date: Wed, 11 Oct 2017 20:03:17 +0800 Subject: [PATCH] Ignore RejectedExecutionException --- .../org/jackhuang/hmcl/util/Log4jHandler.java | 68 +++++++++++-------- 1 file changed, 41 insertions(+), 27 deletions(-) diff --git a/HMCL/src/main/java/org/jackhuang/hmcl/util/Log4jHandler.java b/HMCL/src/main/java/org/jackhuang/hmcl/util/Log4jHandler.java index 4d8c43581..3498f7dd4 100644 --- a/HMCL/src/main/java/org/jackhuang/hmcl/util/Log4jHandler.java +++ b/HMCL/src/main/java/org/jackhuang/hmcl/util/Log4jHandler.java @@ -29,6 +29,7 @@ import java.util.concurrent.*; import java.util.concurrent.atomic.AtomicBoolean; import javax.xml.parsers.ParserConfigurationException; import org.jackhuang.hmcl.api.HMCLApi; +import org.jackhuang.hmcl.api.HMCLog; import org.jackhuang.hmcl.api.event.process.JavaProcessStoppedEvent; import org.jackhuang.hmcl.api.func.Consumer; import org.jackhuang.hmcl.ui.LogWindow; @@ -92,15 +93,24 @@ public class Log4jHandler extends Thread implements Consumer { - if (!interrupted.get()) { - if (enabled) - newLogLine("").get(); - outputStream.close(); - join(); - } - return null; - }); + try { + executorService.submit(() -> { + if (!interrupted.get()) { + if (enabled) { + Future f = newLogLine(""); + if (f != null) + f.get(); + } + outputStream.close(); + join(); + } + return null; + }).get(); + } catch (Exception e) { + HMCLog.err("Please contact author", e); + } finally { + executorService.shutdown(); + } } } @@ -116,25 +126,29 @@ public class Log4jHandler extends Thread implements Consumer { - if (enabled) - try { - String log = content; - if (!log.trim().startsWith("<")) { // without logging configuration. - log = "", "") + "]]>"; + try { + return executorService.submit(() -> { + if (enabled) + try { + String log = content; + if (!log.trim().startsWith("<")) { // without logging configuration. + log = "", "") + "]]>"; + } + outputStream.write(log + .replace("log4j:Event", "log4j_Event") + .replace("log4j:Message", "log4j_Message") + .replace("log4j:Throwable", "log4j_Throwable") + .getBytes()); + outputStream.flush(); + } catch (IOException ignore) { // won't happen + throw new Error(ignore); } - outputStream.write(log - .replace("log4j:Event", "log4j_Event") - .replace("log4j:Message", "log4j_Message") - .replace("log4j:Throwable", "log4j_Throwable") - .getBytes()); - outputStream.flush(); - } catch (IOException ignore) { // won't happen - throw new Error(ignore); - } - else - printlnImpl(content, Level.guessLevel(content)); - }); + else + printlnImpl(content, Level.guessLevel(content)); + }); + } catch (RejectedExecutionException e) { + return null; + } } class Log4jHandlerImpl extends DefaultHandler {