2009-11-05 26 views
0

我想寫一些java代碼,將代碼將獲得可可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) 

所以有被交互這裏有兩個小班首先是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中完成任何命令行編譯,所以我認爲可能通過鏈接器錯誤來自於此,但我不確定。任何人都可以給我一個關於這裏會發生什麼的暗示嗎?

P.S.注意到Cocoa應用程序會在發生此錯誤之前彈出一個空窗口,但沒有內容可能很重要。

+0

你確定你想要運行的代碼之前編譯所有的文件嗎? – 2009-11-05 20:56:20

+0

是的,我做了一個javac * .java,所有的文件都在同一個目錄下。 – Mike2012 2009-11-05 21:01:51

+0

該目錄包含:IKPictureTaker $ _Class.class \t QTKit.class IKPictureTaker.class \t \t QTKit.java IKPictureTaker.java \t \t Quartz.class IKPictureTakerTest.class \t Quartz.java IKPictureTakerTest.java QTKit和石英小一行類。我認爲錯誤中的類是嵌套接口:公共接口_Class擴展NSClass – Mike2012 2009-11-05 21:04:14

回答

1

不知道你的一行類有什麼(這是什麼庫正在加載),但我認爲這就是你的問題。我把它通過使被加載確保石英工作:

公共接口IKPictureTaker延伸的NSObject {

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

}

公共類IKPictureTakerTest擴展的JFrame {

// ...

// QTKit instance = QTKit.instance;

//Quartz.instance.toString();

// ...

}

+0

奇怪我添加了這些更改並得到相同的問題,你如何編譯它?我在做javac * .java然後java -Djna.library.path =/Library/Java/Extensions/bin IKPictureTakerTest 來運行它。這可能是差異嗎?您能否偶然地將您的版本發送給[email protected]? – Mike2012 2009-11-06 23:12:57