プログラムコードを書いて実行するとエラーが起きる
今JAVAのプログラムの勉強(初心者)をしているのですが、とある参考書のプログラムコードを書いて実行すると
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at rensyu7.pkg1.Rensyu71.main(Rensyu71.java:18)
Java Result: 1
というエラーが起きておりどこがエラーなのかコードを眺めてみたのですがよくわかりません。
クラス: Rensyu71
package rensyu7.pkg1;
import java.lang.reflect.*;
public class Rensyu71 {
///////////////////////////////////////////////////////////////////////////////
// mainメソッド
//////////////////////////////////////////////////////////////////////////////
public static void main (String[] args) {
String FQCN = args[0];
String hairetu = args[1];
try {
Class<?>class1 = Class.forName (FQCN);
listMethods (class1);
//listMethodsの呼び出し
if (hairetu.equals ("E")) {
launchInternal (class1);
//launchInternalメソッドの呼び出し
}else if(hairetu.equals ("I")){
launchInternal (class1);
//launchInternalメソッドの呼び出し
}else{
throw new IllegalArgumentException ("起動方法が不正です");
}
} catch (Exception e) {
System.out.println (e.getMessage ());
e.printStackTrace ();
System.exit (1);
}
showmemory ();
//showmemoryの呼び出し
System.exit (0);
}
///////////////////////////////////////////////////////////////////////////
// listMethodsメソッド
////////////////////////////////////////////////////////////////////////////
public static void listMethods(Class<?>class1){
System.out.println ("メソッド一覧を表示します");
Method[]hairetu2 = class1.getDeclaredMethods ();
for (Method m : hairetu2) {
System.out.println (m.getName ());
}
}
////////////////////////////////////////////////////////////////////////////
// launchExternalメソッド
////////////////////////////////////////////////////////////////////////////
public static void launchexternal(Class<?>class1)
throws Exception{
ProcessBuilder PB = new ProcessBuilder ("java",class1.getName ());
Process process = PB.start ();
process.waitFor ();
}
////////////////////////////////////////////////////////////////////////////
/// launchInternalメソッド
////////////////////////////////////////////////////////////////////////////
public static void launchInternal(Class<?>class1)throws Exception{
Method m = class1.getMethod ("main", String[].class);
String[] args = {};
m.invoke (null, (Object)args);
//
}
////////////////////////////////////////////////////////////////////////////////
// shoememoryメソッド
///////////////////////////////////////////////////////////////////////////////
public static void showmemory(){
long free = Runtime.getRuntime ().freeMemory ();
long total = Runtime.getRuntime ().totalMemory ();
long memorisiyouryou = (total-free)/1024/1024;
System.out.println ("現在のメモリの使用量:"+memorisiyouryou+"MB");
}
}
============================================================================
クラス:MemoryEater
package rensyu7.pkg1;
public class MemoryEater {
public static void main (String[] args) {
System.out.println ("eating memory・・・・・・・");
long[] larry = new long[128000];
for (int i = 0; i <larry.length; i++) {
larry[i]=i;
}
}
}
滅茶苦茶なプログラムですが、初心者ですので大目にみてください。
どこを直せば実行できますか?どなたかご教授願います。
お礼
早速のご回答ありがとうございます。 なるほど。。。 そういう手を使うのですね。 勉強になりました。 log4jなどを用いてログを出すときに 何々メソッドの何行目とか情報をとれますが、 それもこのような方法でやっているのでしょうか? ありがとうございました。