From a5f874e5712aa80e5afaab7b12db92fc2fc13082 Mon Sep 17 00:00:00 2001 From: Jonas Herzig Date: Tue, 16 Feb 2021 23:54:33 +0100 Subject: [PATCH] Fix crash with certain render output file values (fixes #396) --- .../render/gui/GuiRenderSettings.java | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java index cf0f58f5..24aac257 100644 --- a/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java +++ b/src/main/java/com/replaymod/render/gui/GuiRenderSettings.java @@ -129,7 +129,7 @@ public class GuiRenderSettings extends AbstractGuiPopup { public void run() { GuiFileChooserPopup popup = GuiFileChooserPopup.openSaveGui(GuiRenderSettings.this, "replaymod.gui.save", encodingPresetDropdown.getSelectedValue().getFileExtension()); - popup.setFolder(outputFile.getParentFile()); + popup.setFolder(getParentFile(outputFile)); popup.setFileName(outputFile.getName()); Futures.addCallback( popup.getFuture(), @@ -538,13 +538,13 @@ public class GuiRenderSettings extends AbstractGuiPopup { bitRateUnit.setSelected(0); } File savedOutputFile = settings.getOutputFile(); - if (savedOutputFile == null || !savedOutputFile.getParentFile().exists()) { + if (savedOutputFile == null || !getParentFile(savedOutputFile).exists()) { this.outputFile = generateOutputFile(encodingPreset); userDefinedOutputFileName = false; } else if (savedOutputFile.exists()) { String name = generateOutputFile(encodingPreset).getName(); boolean isFolder = savedOutputFile.isDirectory() && !savedOutputFile.getName().endsWith(".exr"); - this.outputFile = new File(isFolder ? savedOutputFile : savedOutputFile.getParentFile(), name); + this.outputFile = new File(isFolder ? savedOutputFile : getParentFile(savedOutputFile), name); userDefinedOutputFileName = false; } else { this.outputFile = conformExtension(savedOutputFile, encodingPreset); @@ -588,7 +588,7 @@ public class GuiRenderSettings extends AbstractGuiPopup { videoHeight.getInteger(), frameRateSlider.getValue() + 10, bitRateField.getInteger() << (10 * bitRateUnit.getSelected()), - serialize && !userDefinedOutputFileName ? outputFile.getParentFile() : outputFile, + serialize && !userDefinedOutputFileName ? getParentFile(outputFile) : outputFile, nametagCheckbox.isChecked(), stabilizeYaw.isChecked() && (serialize || stabilizeYaw.isEnabled()), stabilizePitch.isChecked() && (serialize || stabilizePitch.isEnabled()), @@ -617,7 +617,7 @@ public class GuiRenderSettings extends AbstractGuiPopup { public void setOutputFileBaseName(String base) { RenderSettings.EncodingPreset preset = encodingPresetDropdown.getSelectedValue(); - File file = new File(outputFile.getParentFile(), base + "." + preset.getFileExtension()); + File file = new File(getParentFile(outputFile), base + "." + preset.getFileExtension()); // Ensure the file name is valid try { //noinspection ResultOfMethodCallIgnored @@ -634,7 +634,7 @@ public class GuiRenderSettings extends AbstractGuiPopup { if (name.contains(".")) { name = name.substring(0, name.lastIndexOf('.')); } - return new File(file.getParentFile(), name + "." + preset.getFileExtension()); + return new File(getParentFile(file), name + "." + preset.getFileExtension()); } protected Path getSettingsPath() { @@ -677,4 +677,10 @@ public class GuiRenderSettings extends AbstractGuiPopup { screen.setBackground(AbstractGuiScreen.Background.NONE); return screen; } + + private static File getParentFile(File file) { + File parent = file.getParentFile(); + // parent this can be null if file is just a name (i.e. in CWD) + return parent == null ? new File(".") : parent; + } }