0

Rococoa を使用してロードする Cocoa IKPictureTaker ウィジェットを取得する Java コードを作成しようとしています。近づいているように感じますが、エラーが発生しており、なぜそれが発生しているのかよくわかりません。私が得ているエラーはこれです:

Exception in thread "main" java.lang.ExceptionInInitializerError
at IKPictureTakerTest.main(IKPictureTakerTest.java:39)
Caused by: java.lang.IllegalArgumentException: interface IKPictureTaker$_Class is not visible from class loader
at java.lang.reflect.Proxy.getProxyClass(Proxy.java:353)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:581)
at org.rococoa.Rococoa.createProxy(Rococoa.java:164)
at org.rococoa.Rococoa.wrap(Rococoa.java:118)
at org.rococoa.Rococoa.createClass(Rococoa.java:50)
at IKPictureTaker.<clinit>(IKPictureTaker.java:31)

したがって、ここで相互作用する 2 つの小さなクラスがあり、最初は IKPictureTaker クラスです。

public interface IKPictureTaker extends NSObject
{
   public static final _Class MYCLASS = Rococoa.createClass("IKPictureTaker", _Class.class);

   public interface _Class extends NSClass
   {
   /**
   * Returns a shared {@code IKPictureTaker} instance, creating it if necessary.
   * @return an {@code IKPictureTaker} object.
   */
   IKPictureTaker pictureTaker();
   }

   NSInteger runModal();
}

そしてテストクラス:

public class IKPictureTakerTest extends JFrame
{
   public static void main(String[] args) throws Exception
   {
      // You need a GUI before this will work.
      new IKPictureTakerTest().setVisible(true);

      NSAutoreleasePool pool = NSAutoreleasePool.new_();

      QTKit instance = QTKit.instance;
      // Initialize the Quartz framework.
      Quartz.instance.toString();

      // Display the dialog.
     IKPictureTaker pictureTaker = IKPictureTaker.MYCLASS.pictureTaker();
     NSInteger result = pictureTaker.runModal();

     if (result.intValue() == 0) // NSCancelButton
     {
        System.out.println("User cancelled.");
     }
     else
     {
        assert result.intValue() == 1; // NSOKButton
        System.out.println("User chose an image.");
     }

     pool.release();
   }
}

Javaでコマンドラインコンパイルを行ったのはこれが初めてなので、おそらくリンカーエラーが原因だと思いますが、よくわかりません。ここで何が起こっているのかについて、誰かが私にヒントを与えることができますか?

PS このエラーが発生する前に、Cocoa アプリケーションが空のウィンドウでポップアップすることに注意することが重要かもしれませんが、内容はありません。

4

1 に答える 1

1

あなたの1行のクラスが何を持っているのか(つまり、ライブラリがロードされているのか)はわかりませんが、それがあなたの問題だと思います。Quartz がロードされていることを確認することで、動作するようになりました。

public interface IKPictureTaker extends NSObject {

    Library quartzINSTANCE = (Library) Native.loadLibrary("Quartz", Library.class);
    //...

}

public class IKPictureTakerTest extends JFrame {

   //...

   //QTKit instance = QTKit.instance;

   //Quartz.instance.toString();

   //...

}
于 2009-11-06T21:18:13.043 に答える