diff --git a/core/src/net/sf/openrocket/appearance/defaults/ResourceDecalImage.java b/core/src/net/sf/openrocket/appearance/defaults/ResourceDecalImage.java index 9bc7a4fbe..3e91342ea 100644 --- a/core/src/net/sf/openrocket/appearance/defaults/ResourceDecalImage.java +++ b/core/src/net/sf/openrocket/appearance/defaults/ResourceDecalImage.java @@ -50,14 +50,19 @@ public class ResourceDecalImage implements DecalImage { @Override public void exportImage(File file) throws IOException { - InputStream is; - is = getBytes(); + InputStream is = getBytes(); OutputStream os = new BufferedOutputStream(new FileOutputStream(file)); - FileUtils.copy(is, os); + if (is == null) { + return; + } - is.close(); - os.close(); + try { + FileUtils.copy(is, os); + } finally { + is.close(); + os.close(); + } } @Override diff --git a/core/src/net/sf/openrocket/file/wavefrontobj/export/OBJExporterFactory.java b/core/src/net/sf/openrocket/file/wavefrontobj/export/OBJExporterFactory.java index 14259bc81..6b24ce9b3 100644 --- a/core/src/net/sf/openrocket/file/wavefrontobj/export/OBJExporterFactory.java +++ b/core/src/net/sf/openrocket/file/wavefrontobj/export/OBJExporterFactory.java @@ -35,6 +35,8 @@ import net.sf.openrocket.rocketcomponent.RocketComponent; import net.sf.openrocket.rocketcomponent.Transition; import net.sf.openrocket.rocketcomponent.TubeFinSet; import net.sf.openrocket.util.FileUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.File; import java.io.FileOutputStream; @@ -68,6 +70,8 @@ public class OBJExporterFactory { private final OBJExportOptions options; private final File file; + private static final Logger log = LoggerFactory.getLogger(OBJExporterFactory.class); + // The different exporters for each component private static final Map, ExporterFactory> EXPORTER_MAP = Map.of( BodyTube.class, (ExporterFactory) BodyTubeExporter::new, @@ -188,10 +192,14 @@ public class OBJExporterFactory { if (options.isExportAppearance()) { String mtlFilePath = FileUtils.removeExtension(filePath) + ".mtl"; List mtls = materials.get(obj); - try (OutputStream mtlOutputStream = new FileOutputStream(mtlFilePath, false)) { - DefaultMtlWriter.write(mtls, mtlOutputStream); - } catch (IOException e) { - throw new RuntimeException(e); + if (mtls != null) { + try (OutputStream mtlOutputStream = new FileOutputStream(mtlFilePath, false)) { + DefaultMtlWriter.write(mtls, mtlOutputStream); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + log.debug("No materials to export for {}", filePath); } obj.setMtlFileNames(List.of(mtlFilePath)); }