Skip to content

Commit 2508ca8

Browse files
committed
Fix classloader NPE from PySNT calls
1 parent b0fc04b commit 2508ca8

10 files changed

Lines changed: 42 additions & 34 deletions

File tree

‎src/main/java/sc/fiji/snt/SNTService.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -545,8 +545,9 @@ else if (nTree.contains("dg") || nTree.contains("dentate") || nTree.contains("gr
545545
}
546546

547547
private Tree getResourceSWCTree(final String treeLabel, final String resourcePath) {
548-
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
549-
final InputStream is = classloader.getResourceAsStream(resourcePath);
548+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
549+
classLoader = (classLoader != null) ? classLoader : SNTService.class.getClassLoader();
550+
final InputStream is = classLoader.getResourceAsStream(resourcePath);
550551
final PathAndFillManager pafm = new PathAndFillManager(1, 1, 1, GuiUtils.micrometer());
551552
pafm.setHeadless(true);
552553
Tree tree;

‎src/main/java/sc/fiji/snt/analysis/sholl/ShollUtils.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -61,10 +61,11 @@ public static String d2s(final double d) {
6161

6262
// this method is from BAR
6363
private static URL getResource(final String resourcePath) {
64-
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
64+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
65+
classLoader = (classLoader != null) ? classLoader : ShollUtils.class.getClassLoader();
6566
URL resource = null;
6667
try {
67-
final Enumeration<URL> resources = loader.getResources(resourcePath);
68+
final Enumeration<URL> resources = classLoader.getResources(resourcePath);
6869
while (resources.hasMoreElements()) {
6970
resource = resources.nextElement();
7071
if (resource.toString().contains(resourcePath))

‎src/main/java/sc/fiji/snt/annotation/AllenUtils.java‎

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -75,8 +75,9 @@ private static Map<String, String> createBrainAreasResourcePathsMap() {
7575
}
7676

7777
private static JSONObject getJSONfile(final String resourcePath) {
78-
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
79-
final InputStream is = classloader.getResourceAsStream(resourcePath);
78+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
79+
classLoader = (classLoader != null) ? classLoader : AllenUtils.class.getClassLoader();
80+
final InputStream is = classLoader.getResourceAsStream(resourcePath);
8081
final JSONTokener tokener = new JSONTokener(is);
8182
final JSONObject json = new JSONObject(tokener);
8283
try {
@@ -500,21 +501,20 @@ private DefaultMutableTreeNode getParentNode(final AllenCompartment parentStruct
500501
public static OBJMesh getRootMesh(final ColorRGB color) {
501502
final String meshLabel = "Whole Brain";
502503
String meshPath;
503-
double volume;
504-
switch (VERSION) {
505-
case V3:
506-
meshPath = "meshes/MouseBrainAllen3.obj";
507-
volume = 513578693035.138d; // pre-computed in trimesh
508-
break;
509-
case V2_5:
510-
meshPath = "meshes/MouseBrainAllen2.5.obj";
511-
volume = 513578693035.138d; // pre-computed in trimesh
512-
break;
513-
default:
514-
throw new IllegalArgumentException("Unrecognized CCF version");
515-
}
516-
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
517-
final URL url = loader.getResource(meshPath);
504+
double volume = switch (VERSION) {
505+
case V3 -> {
506+
meshPath = "meshes/MouseBrainAllen3.obj";
507+
yield 513578693035.138d;
508+
}
509+
case V2_5 -> {
510+
meshPath = "meshes/MouseBrainAllen2.5.obj";
511+
yield 513578693035.138d;
512+
}
513+
default -> throw new IllegalArgumentException("Unrecognized CCF version");
514+
};
515+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
516+
classLoader = (classLoader != null) ? classLoader : AllenUtils.class.getClassLoader();
517+
final URL url = classLoader.getResource(meshPath);
518518
if (url == null)
519519
throw new IllegalArgumentException(meshLabel + " not found");
520520
final OBJMesh mesh = new OBJMesh(url, GuiUtils.micrometer());

‎src/main/java/sc/fiji/snt/annotation/VFBUtils.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,8 +183,9 @@ private static String[] getOBJPathAndLabel(final String identifier) {
183183
}
184184

185185
private static OBJMesh getBundledMesh(final String meshLabel, final String meshPath) {
186-
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
187-
final URL url = loader.getResource(meshPath);
186+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
187+
classLoader = (classLoader != null) ? classLoader : VFBUtils.class.getClassLoader();
188+
final URL url = classLoader.getResource(meshPath);
188189
if (url == null)
189190
throw new IllegalArgumentException(meshLabel + " not found");
190191
final OBJMesh mesh = new OBJMesh(url, GuiUtils.micrometer());

‎src/main/java/sc/fiji/snt/annotation/ZBAtlasUtils.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,8 +91,9 @@ public static OBJMesh getRefBrain() throws IllegalArgumentException {
9191
}
9292

9393
private static OBJMesh getBundledMesh(final String meshLabel, final String meshPath) {
94-
final ClassLoader loader = Thread.currentThread().getContextClassLoader();
95-
final URL url = loader.getResource(meshPath);
94+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
95+
classLoader = (classLoader != null) ? classLoader : ZBAtlasUtils.class.getClassLoader();
96+
final URL url = classLoader.getResource(meshPath);
9697
if (url == null)
9798
throw new IllegalArgumentException(meshLabel + " not found");
9899
final OBJMesh mesh = new OBJMesh(url, GuiUtils.micrometer());

‎src/main/java/sc/fiji/snt/gui/FADerivedIcon.java‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,12 +59,14 @@ class FADerivedIcon implements Icon {
5959
private static Font loadFont(final String fontName) {
6060
Font font;
6161
try {
62-
final InputStream is = Thread.currentThread().getContextClassLoader()
62+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
63+
classLoader = (classLoader != null) ? classLoader : FADerivedIcon.class.getClassLoader();
64+
final InputStream is = classLoader
6365
.getResourceAsStream(String.format("META-INF/resources/webjars/font-awesome/%s/webfonts/%s", FA_VERSION, fontName));
6466
assert is != null;
6567
font = Font.createFont(Font.TRUETYPE_FONT, is).deriveFont((float)defSize());
6668
}
67-
catch (final FontFormatException | IOException ex) {
69+
catch (final Exception ignored) {
6870
font = UIManager.getFont("Label.font"); // desperate fallback
6971
}
7072
return font;

‎src/main/java/sc/fiji/snt/gui/cmds/PrefsCmd.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -210,8 +210,9 @@ public void clearAll() {
210210
}
211211

212212
private Set<Class<?>> findClasses(final String packageName) {
213-
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
214-
final InputStream is = classloader.getResourceAsStream(packageName.replaceAll("[.]", "/"));
213+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
214+
classLoader = (classLoader != null) ? classLoader : PrefsCmd.class.getClassLoader();
215+
final InputStream is = classLoader.getResourceAsStream(packageName.replaceAll("[.]", "/"));
215216
final BufferedReader reader = new BufferedReader(new InputStreamReader(is));
216217
final Set<Class<?>> set = reader.lines().filter(line -> line.endsWith(".class") && !line.contains("$"))
217218
.map(line -> getClass(line, packageName)).collect(Collectors.toSet());

‎src/main/java/sc/fiji/snt/io/MouseLightLoader.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -623,8 +623,9 @@ public static List<MouseLightLoader> getAllLoaders() throws IllegalArgumentExcep
623623
* cells "AA0001", "AA0002", "AA0003", "AA0004"
624624
*/
625625
public static List<Tree> demoTrees() {
626-
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
627-
final InputStream is = classloader.getResourceAsStream("ml/demo-trees/AA0001-4.json");
626+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
627+
classLoader = (classLoader != null) ? classLoader : AllenUtils.class.getClassLoader();
628+
final InputStream is = classLoader.getResourceAsStream("ml/demo-trees/AA0001-4.json");
628629
final Map<String, Tree> result = MouseLightLoader.extractTrees(is, "dendrites");
629630
if (result.values().stream().anyMatch(tree -> tree == null || tree.isEmpty())) {
630631
return null;

‎src/main/java/sc/fiji/snt/util/ImpUtils.java‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -582,8 +582,9 @@ public static void invertLut(final ImagePlus imp) {
582582
}
583583

584584
private static ImagePlus demoImageInternal(final String path, final String displayTitle) {
585-
final ClassLoader classloader = Thread.currentThread().getContextClassLoader();
586-
final InputStream is = classloader.getResourceAsStream(path);
585+
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
586+
classLoader = (classLoader != null) ? classLoader : ImpUtils.class.getClassLoader();
587+
final InputStream is = classLoader.getResourceAsStream(path);
587588
final boolean redirecting = IJ.redirectingErrorMessages();
588589
IJ.redirectErrorMessages(true);
589590
final ImagePlus imp = new Opener().openTiff(is, displayTitle);

‎src/main/java/sc/fiji/snt/viewer/Viewer2D.java‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import sc.fiji.snt.SNTUtils;
4040
import sc.fiji.snt.Tree;
4141
import sc.fiji.snt.analysis.ColorMapper;
42-
import sc.fiji.snt.analysis.NodeColorMapper;
4342
import sc.fiji.snt.analysis.SNTChart;
4443
import sc.fiji.snt.analysis.TreeColorMapper;
4544
import sc.fiji.snt.util.PointInImage;

0 commit comments

Comments
 (0)