diff options
author | Luck <git@lucko.me> | 2022-04-24 17:25:47 +0100 |
---|---|---|
committer | Luck <git@lucko.me> | 2022-04-24 17:25:47 +0100 |
commit | b077100667c1dee6e73da399e3484f92bbf67cb8 (patch) | |
tree | efac3cb29cb4cdbb93ba7ab2ba2aac9b050731f2 | |
parent | da5a859adb7d25752dd0d3564fa15669242ae92f (diff) | |
download | spark-b077100667c1dee6e73da399e3484f92bbf67cb8.tar.gz spark-b077100667c1dee6e73da399e3484f92bbf67cb8.tar.bz2 spark-b077100667c1dee6e73da399e3484f92bbf67cb8.zip |
Fix NPE caused by initialisation order on Forge/Fabric
3 files changed, 14 insertions, 5 deletions
diff --git a/spark-common/src/main/java/me/lucko/spark/common/util/SparkThreadFactory.java b/spark-common/src/main/java/me/lucko/spark/common/util/SparkThreadFactory.java index 9c7309d..156fa0d 100644 --- a/spark-common/src/main/java/me/lucko/spark/common/util/SparkThreadFactory.java +++ b/spark-common/src/main/java/me/lucko/spark/common/util/SparkThreadFactory.java @@ -23,7 +23,7 @@ package me.lucko.spark.common.util; import java.util.concurrent.ThreadFactory; import java.util.concurrent.atomic.AtomicInteger; -public class SparkThreadFactory implements ThreadFactory { +public class SparkThreadFactory implements ThreadFactory, Thread.UncaughtExceptionHandler { private static final AtomicInteger poolNumber = new AtomicInteger(1); private final AtomicInteger threadNumber = new AtomicInteger(1); private final String namePrefix; @@ -36,7 +36,14 @@ public class SparkThreadFactory implements ThreadFactory { public Thread newThread(Runnable r) { Thread t = new Thread(r, this.namePrefix + this.threadNumber.getAndIncrement()); + t.setUncaughtExceptionHandler(this); t.setDaemon(true); return t; } + + @Override + public void uncaughtException(Thread t, Throwable e) { + System.err.println("Uncaught exception thrown by thread " + t.getName()); + e.printStackTrace(); + } } diff --git a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java index 7b0af11..7d0a989 100644 --- a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java +++ b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java @@ -55,17 +55,18 @@ public abstract class FabricSparkPlugin implements SparkPlugin { private final FabricSparkMod mod; private final Logger logger; protected final ScheduledExecutorService scheduler; - protected final SparkPlatform platform; + + protected SparkPlatform platform; protected final ThreadDumper.GameThread threadDumper = new ThreadDumper.GameThread(); protected FabricSparkPlugin(FabricSparkMod mod) { this.mod = mod; this.logger = LogManager.getLogger("spark"); this.scheduler = Executors.newScheduledThreadPool(4, new SparkThreadFactory()); - this.platform = new SparkPlatform(this); } public void enable() { + this.platform = new SparkPlatform(this); this.platform.enable(); } diff --git a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java index 7805935..022b620 100644 --- a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java +++ b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java @@ -74,17 +74,18 @@ public abstract class ForgeSparkPlugin implements SparkPlugin { private final ForgeSparkMod mod; private final Logger logger; protected final ScheduledExecutorService scheduler; - protected final SparkPlatform platform; + + protected SparkPlatform platform; protected final ThreadDumper.GameThread threadDumper = new ThreadDumper.GameThread(); protected ForgeSparkPlugin(ForgeSparkMod mod) { this.mod = mod; this.logger = LogManager.getLogger("spark"); this.scheduler = Executors.newScheduledThreadPool(4, new SparkThreadFactory()); - this.platform = new SparkPlatform(this); } public void enable() { + this.platform = new SparkPlatform(this); this.platform.enable(); } |