2009-11-05 2 views
0

Я пытаюсь написать код Java, который будет кодировать код, который получит виджет Cocoa IKPictureTaker для загрузки с использованием Rococoa. Я чувствую, что сейчас становлюсь ближе, но у меня возникает ошибка, и я не совсем понимаю, почему это происходит. Ошибка, я получаю это:Проблема расшифровки класса 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

Вы уверены, что вы собрали все файлы, прежде чем пытаться запустить код? –

+0

yes Я сделал javac * .java и все файлы находятся в том же каталоге. – Mike2012

+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 и кварцевые маленькие однострочные классы. Я думаю, что класс, о котором идет речь в ошибке, является вложенным интерфейсом: public interface _Class extends NSClass – Mike2012

ответ

1

Не знаете, что у вас есть в ваших линейных классах (это то, что загружаются libs), но я думаю, что это ваша проблема. Я получил его на работу, убедившись, что Кварц загружается:

общедоступный интерфейс IKPictureTaker расширяет NSObject {

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

}

общественного класса IKPictureTakerTest расширяет JFrame {

// ...

// QTKit instance = QTKit.instance;

//Quartz.instance.toString();

// ...

}

+0

weird Я добавил эти изменения и получил эту же проблему, как их компилировать? Я делаю javac * .java, затем java -Djna.library.path =/Library/Java/Extensions/bin IKPictureTakerTest для запуска. Разве это может быть разница? Можете ли вы случайно отправить мне свою версию, которая работает на [email protected]? – Mike2012

Смежные вопросы