2011-12-22 5 views
2

私は楕円に私のJFrameウィンドウの形状を設定しようとしているが、その代わりに、それは次のエラーを投げている:

java.lang.IllegalArgumentException: wrong number of arguments 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at Splash.setShape(Splash.java:48) 
    at Splash.<init>(Splash.java:25) 
    at BackOffice.init(BackOffice.java:40) 
    at sun.applet.AppletPanel.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

問題は、I 2つのパラメータを送信していますが、メソッドは2つのパラメータしか受け付けないので、どこからこのエラーが発生しているのかわかりません。 EDIT

private void setShape() { 
    Class<?> awtUtilitiesClass; 
    try { 
     awtUtilitiesClass = Class.forName("com.sun.awt.AWTUtilities"); 
     Method mSetWindowShape = awtUtilitiesClass.getMethod("setWindowShape", Window.class, Shape.class); 
     Shape shape = (Shape) new Ellipse2D.Double(0, 0, getWidth(), getHeight()); 
     mSetWindowShape.invoke(this, shape); 
    } catch (ClassNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IllegalArgumentException e) { 
     e.printStackTrace(); 
    } catch (IllegalAccessException e) { 
     e.printStackTrace(); 
    } catch (InvocationTargetException e) { 
     e.printStackTrace(); 
    } catch (SecurityException e) { 
     e.printStackTrace(); 
    } catch (NoSuchMethodException e) { 
     e.printStackTrace(); 
    } 

} 

:ここmSetWindowShape.invoke(this, shape);は、関連する方法であるという行でエラーにポイントというラインは、私は1つPARAMTERを脱いで、同じエラー(引数の数が正しくありません)を得ました。私は3つのパラメータ(ウィンドウ、形状、0)を入れ、 '引数型の不一致'を得ました。私は3番目のパラメータとしてブール値と文字列を試しましたが、それらも引数型の不一致を与えました。チュートリアルでは2つのパラメータしか表示されないので、私はこれを理解していません。今は明らかに3つありますか?

答えて

3

あなた:

mSetWindowShape.invoke(this, shape); 

は次のようになります。

Method.invoke()方法は、メソッドが最初の引数としての呼び出されているオブジェクトを受け取ります。 AWTUtilities.setWindowShape()は静的メソッドなので、最初の引数はnullにする必要があります。

また、Java 7をターゲットにできる場合は、代わりにFrame.setShape()を使用してください。正式にはAPIの一部です。 com.sun。*クラスは今後も廃止される可能性があります。

+0

うわー、頭が痛い。本当にありがとう!! – Ozzy

1

あなたのコードでは、これが正しい方法です。frameObject.setShape(shape); 希望します。よろしく。

+0

これはおそらくJava 1.7+(他の回答に記載されているように)には正しいですが、私はまだ1.6です。 – Ozzy