aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuck <git@lucko.me>2022-04-24 17:25:47 +0100
committerLuck <git@lucko.me>2022-04-24 17:25:47 +0100
commitb077100667c1dee6e73da399e3484f92bbf67cb8 (patch)
treeefac3cb29cb4cdbb93ba7ab2ba2aac9b050731f2
parentda5a859adb7d25752dd0d3564fa15669242ae92f (diff)
downloadspark-b077100667c1dee6e73da399e3484f92bbf67cb8.tar.gz
spark-b077100667c1dee6e73da399e3484f92bbf67cb8.tar.bz2
spark-b077100667c1dee6e73da399e3484f92bbf67cb8.zip
Fix NPE caused by initialisation order on Forge/Fabric
-rw-r--r--spark-common/src/main/java/me/lucko/spark/common/util/SparkThreadFactory.java9
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java5
-rw-r--r--spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java5
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();
}