* catch and ignore JUnRar OutOfMemoryErrors

This commit is contained in:
Reinhard Pointner 2009-06-02 17:14:54 +00:00
parent 1640041266
commit 0c698902df
3 changed files with 23 additions and 20 deletions

View File

@ -17,25 +17,22 @@ import net.sourceforge.filebot.ResourceManager;
class LanguageComboBoxCellRenderer implements ListCellRenderer { class LanguageComboBoxCellRenderer implements ListCellRenderer {
private final Border padding = new EmptyBorder(2, 4, 2, 4); private Border padding = new EmptyBorder(2, 2, 2, 2);
private final Border favoritePadding = new EmptyBorder(0, 6, 0, 6);
private final ListCellRenderer base;
private Border favoritePadding = new EmptyBorder(0, 6, 0, 6);
private ListCellRenderer base;
public LanguageComboBoxCellRenderer(final ListCellRenderer base) { public LanguageComboBoxCellRenderer(final ListCellRenderer base) {
this.base = base; this.base = base;
this.padding = new CompoundBorder(padding, ((JLabel) base).getBorder());
} }
@Override @Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) { public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
JLabel c = (JLabel)base.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus); JLabel c = (JLabel) base.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
Language language = (Language) value; Language language = (Language) value;
c.setText(language.getName()); c.setText(language.getName());
@ -58,5 +55,4 @@ class LanguageComboBoxCellRenderer implements ListCellRenderer {
return c; return c;
} }
} }

View File

@ -6,6 +6,8 @@ import java.io.IOException;
import java.nio.ByteBuffer; import java.nio.ByteBuffer;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.Map; import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.sourceforge.tuned.ByteBufferOutputStream; import net.sourceforge.tuned.ByteBufferOutputStream;
@ -37,11 +39,17 @@ class RarArchive implements Archive {
ByteBufferOutputStream buffer = new ByteBufferOutputStream(header.getDataSize()); ByteBufferOutputStream buffer = new ByteBufferOutputStream(header.getDataSize());
// write contents to buffer try {
rar.extractFile(header, buffer); // write contents to buffer
rar.extractFile(header, buffer);
// add memory file
vfs.put(header.getFileNameString(), buffer.getByteBuffer()); // add memory file
vfs.put(header.getFileNameString(), buffer.getByteBuffer());
} catch (OutOfMemoryError e) {
// ignore, there seems to be bug with JUnRar allocating lots of memory for no apparent reason
// @see https://sourceforge.net/forum/forum.php?thread_id=2773018&forum_id=706772
Logger.getLogger(getClass().getName()).log(Level.WARNING, "Cannot extract " + header.getFileNameString());
}
} }
} catch (RarException e) { } catch (RarException e) {
throw new IOException(e); throw new IOException(e);

View File

@ -2,9 +2,8 @@
package net.sourceforge.filebot.ui.panel.subtitle; package net.sourceforge.filebot.ui.panel.subtitle;
import static net.sourceforge.filebot.Settings.getApplicationName; import static net.sourceforge.filebot.Settings.*;
import static net.sourceforge.filebot.Settings.getApplicationVersion; import static net.sourceforge.filebot.ui.panel.subtitle.LanguageComboBoxModel.*;
import static net.sourceforge.filebot.ui.panel.subtitle.LanguageComboBoxModel.ALL_LANGUAGES;
import java.awt.event.ItemEvent; import java.awt.event.ItemEvent;
import java.net.URI; import java.net.URI;
@ -45,7 +44,7 @@ public class SubtitlePanel extends AbstractSearchPanel<SubtitleProvider, Subtitl
JComboBox languageComboBox = new JComboBox(languageModel); JComboBox languageComboBox = new JComboBox(languageModel);
languageComboBox.setRenderer(new LanguageComboBoxCellRenderer(languageComboBox.getRenderer())); languageComboBox.setRenderer(new LanguageComboBoxCellRenderer(languageComboBox.getRenderer()));
// restore state // restore state
languageModel.setSelectedItem(persistentSelectedLanguage.getValue()); languageModel.setSelectedItem(persistentSelectedLanguage.getValue());
languageModel.favorites().addAll(0, persistentFavorites.getValue()); languageModel.favorites().addAll(0, persistentFavorites.getValue());