From db06240b3eeabd9182200e342957b710f736ff32 Mon Sep 17 00:00:00 2001 From: tama3 Date: Tue, 11 Sep 2007 01:33:56 +0000 Subject: [PATCH] counter-plan for OutOfMemoryError, expand max heap size and show error message when OutOfMemoryError is occured git-svn-id: svn+ssh://svn.sourceforge.jp/svnroot/stigmata/trunk@193 acee48c3-7b26-0410-bdac-b3d0e5314bbc --- src/bin/stigmata.nsi | 2 +- .../jp/naist/se/stigmata/ui/swing/ControlPane.java | 10 ++-- .../naist/se/stigmata/ui/swing/StigmataFrame.java | 55 ++++++++++++++-------- src/main/resources/resources/messages.properties | 1 + src/main/resources/resources/messages_ja.source | 1 + 5 files changed, 44 insertions(+), 25 deletions(-) diff --git a/src/bin/stigmata.nsi b/src/bin/stigmata.nsi index 864940a..4487032 100755 --- a/src/bin/stigmata.nsi +++ b/src/bin/stigmata.nsi @@ -69,7 +69,7 @@ Section "running-stigmata" File "..\..\target\xmlcli-1.2.1.jar" File "..\..\target\asm-all-2.2.3.jar" File "..\..\target\commons-logging-1.0.3.jar" - StrCpy $R0 '$R0 -Dexecution.directory="$EXEDIR" -jar "${JARFILE}" $R1' + StrCpy $R0 '$R0 -Xmx256M -Dexecution.directory="$EXEDIR" -jar "${JARFILE}" $R1' !ifdef SPLASH_IMAGE SetOutPath $TEMP diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java b/src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java index 2a8ed55..ad8a405 100644 --- a/src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java +++ b/src/main/java/jp/naist/se/stigmata/ui/swing/ControlPane.java @@ -276,8 +276,9 @@ public class ControlPane extends JPanel{ BirthmarkEnvironment environment = generateEnvironment(); String[] fileX = targetX.getValues(); String[] fileY = targetY.getValues(); - stigmata.compareSpecifiedPair(birthmarks.getSelectedServiceTypes(), fileX, - fileY, environment); + stigmata.compareSpecifiedPair( + birthmarks.getSelectedServiceTypes(), fileX, fileY, environment + ); } private void compareGuessedPair(){ @@ -285,8 +286,9 @@ public class ControlPane extends JPanel{ String[] fileX = targetX.getValues(); String[] fileY = targetY.getValues(); - stigmata.compareGuessedPair(birthmarks.getSelectedServiceTypes(), fileX, - fileY, environment); + stigmata.compareGuessedPair( + birthmarks.getSelectedServiceTypes(), fileX, fileY, environment + ); } private BirthmarkEnvironment generateEnvironment(){ diff --git a/src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java b/src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java index 37675b0..e53d636 100644 --- a/src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java +++ b/src/main/java/jp/naist/se/stigmata/ui/swing/StigmataFrame.java @@ -191,7 +191,7 @@ public class StigmataFrame extends JFrame{ } ); tabPane.setSelectedIndex(tabPane.getTabCount() - 1); - } catch(Exception e){ + } catch(Throwable e){ showExceptionMessage(e); } } @@ -216,7 +216,7 @@ public class StigmataFrame extends JFrame{ } ); tabPane.setSelectedIndex(tabPane.getTabCount() - 1); - } catch(Exception e){ + } catch(Throwable e){ showExceptionMessage(e); } } @@ -239,7 +239,7 @@ public class StigmataFrame extends JFrame{ } ); tabPane.setSelectedIndex(tabPane.getTabCount() - 1); - }catch(Exception e){ + }catch(Throwable e){ showExceptionMessage(e); } } @@ -320,7 +320,7 @@ public class StigmataFrame extends JFrame{ try{ BirthmarkSet[] holders = stigmata.extract(birthmarks, targets, environment); showExtractionResult(holders, environment); - }catch(Exception e){ + }catch(Throwable e){ showExceptionMessage(e); } } @@ -519,29 +519,44 @@ public class StigmataFrame extends JFrame{ control.setExpertMode(status); } - private void showExceptionMessage(Exception e){ + private void showExceptionMessage(Throwable e){ if(e instanceof BirthmarkElementClassNotFoundException){ showClassNotFoundMessage((BirthmarkElementClassNotFoundException)e); - return; } - JTextArea area = new JTextArea(20, 60); - StringWriter writer = new StringWriter(); - PrintWriter out = new PrintWriter(writer); - e.printStackTrace(out); - if(e instanceof BirthmarkExtractionFailedException){ - out.println("Causes:"); - for(Throwable t: ((BirthmarkExtractionFailedException)e).getCauses()){ - t.printStackTrace(out); + else if(e instanceof OutOfMemoryError){ + showOutOfMemoryError(); + } + else{ + JTextArea area = new JTextArea(20, 60); + StringWriter writer = new StringWriter(); + PrintWriter out = new PrintWriter(writer); + e.printStackTrace(out); + if(e instanceof BirthmarkExtractionFailedException){ + out.println("Causes:"); + for(Throwable t: ((BirthmarkExtractionFailedException)e).getCauses()){ + t.printStackTrace(out); + } } + out.close(); + area.setText(writer.toString()); + JPanel panel = new JPanel(new BorderLayout()); + panel.add(new JLabel("

" + Messages.getString("error.message.contactus") + "

"), BorderLayout.NORTH); + panel.add(new JScrollPane(area), BorderLayout.CENTER); + + JOptionPane.showMessageDialog( + this, panel, Messages.getString("error.dialog.title"), + JOptionPane.WARNING_MESSAGE + ); } - out.close(); - area.setText(writer.toString()); - JPanel panel = new JPanel(new BorderLayout()); - panel.add(new JLabel("

" + Messages.getString("error.message.contactus") + "

"), BorderLayout.NORTH); - panel.add(new JScrollPane(area), BorderLayout.CENTER); + } + private void showOutOfMemoryError(){ + StringBuffer sb = new StringBuffer(); + sb.append("

"); + sb.append(Messages.getString("error.message.outofmemory")); + sb.append("

"); JOptionPane.showMessageDialog( - this, panel, Messages.getString("error.dialog.title"), + this, new String(sb), Messages.getString("error.dialog.title"), JOptionPane.WARNING_MESSAGE ); } diff --git a/src/main/resources/resources/messages.properties b/src/main/resources/resources/messages.properties index 06c59a2..e382cb9 100755 --- a/src/main/resources/resources/messages.properties +++ b/src/main/resources/resources/messages.properties @@ -485,6 +485,7 @@ target.ONE_OF_TARGET=target 1 or target 2 warning.dialog.title=Warnings error.dialog.title=Error +error.message.outofmemory=Out of memory. Java heap size is too few to extract/compare birthmarks. You can specifiy ``-Xmx'' option in java command for expand Java heap size or please decrease your target files. error.message.classpath=Failed proccessed operation because following classes did not found.
Please examine your classpath settings at ``Classpath'' tab in ``Control'' tab. error.message.contactus=Failed proccessed operation because following exception.
Please report to developer with following error messages. error.empty.threshold=Threshold is empty diff --git a/src/main/resources/resources/messages_ja.source b/src/main/resources/resources/messages_ja.source index bc7ae6b..569a798 100755 --- a/src/main/resources/resources/messages_ja.source +++ b/src/main/resources/resources/messages_ja.source @@ -376,6 +376,7 @@ target.BOTH_TARGET= target.ONE_OF_TARGET=‚Ç‚¿‚ç‚© error.dialog.title=ƒGƒ‰[ +error.message.outofmemory=ƒƒ‚ƒŠ•s‘«‚Å‚·Dƒo[ƒXƒ}[ƒN‚Ì’ŠoE”äŠr‚ɏ\•ª‚ÈJavaƒq[ƒvƒTƒCƒY‚ª‚ ‚è‚Ü‚¹‚ñDˆÈ‰º‚̑Ήž‚ð‘I‘ð‚·‚é‚±‚Æ‚ª‚Å‚«‚Ü‚·D error.message.classpath=ˆÈ‰º‚̃Nƒ‰ƒX‚ªŒ©‚‚©‚ç‚È‚©‚Á‚½‚½‚߁CŽw’肳‚ꂽˆ—‚ðŠ®—¹‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½D
uƒRƒ“ƒgƒ[ƒ‹vƒ^ƒu‚̃Nƒ‰ƒXƒpƒXÝ’è‚ðŒ©’¼‚µ‚čĎÀs‚µ‚Ä‚­‚¾‚³‚¢D error.message.contactus=ˆÈ‰º‚Ì—áŠO‚ª”­¶‚µ‚½‚½‚߁CŽw’肳‚ꂽˆ—‚ðŠ®—¹‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚¹‚ñ‚Å‚µ‚½D
ƒGƒ‰[ƒƒbƒZ[ƒW‚ð“Y•t‚µ‚ÄŠJ”­ŽÒ‚܂ŃŒƒ|[ƒg‚ð‚¨Šè‚¢‚µ‚Ü‚·D error.empty.threshold=臒l‚ª“ü—Í‚³‚ê‚Ä‚¢‚Ü‚¹‚ñD -- 2.11.0