Hello Trenton,

Thank you for your response. By your explanation, it seems that this would 
be an issue with any 3rd party application and not just with a java 
application. This is what the NSApplicationAWT interface looks like:

@interface NSApplicationAWT : NSApplication
{
   NSString *fApplicationName;
   BOOL bUseDefaultIcon;
}
...
...
@end

with a number of methods defined before the @end. This interface definition 
resembles common interfaces in other Cocoa applications as suggested by 
Apple.

If I wanted to create a plug-in written using the Qt Cocoa API and want that 
plug-in to be loaded by some 3rd party Cocoa application on Mac OS X 
conforming to Apple standards, I would run into similar issues, since their 
implementation would most definitely not have methods named setQtPrivate.
Qt makes a call to NSApplication's class level method sharedApplication to 
create an NSApplication instance if one does not exist:

[NSApplication sharedApplication]

However, if one does exist, it just returns the existing instance. Qt should 
handle this gracefully in my opinion. Some rearchitecting will be required 
and perhaps Qt Cocoa exposes some type of QApplicationPlugin class which 
handles this properly for plug-ins. This class could call [NSApplication 
sharedApplication] but if this method does not return an instance of a 
QCocoaApplication then it would add observers to receive notifications and 
handle them appropriately if they are meant to be handled (meaning, the 
events have to do with Qt objects).

I briefly looked into delegates, but it looks like an NSApplication instance 
could only have 1 delegate and Qt would not want to override a delegate set 
by AWT or some other application if that is in fact the case.

Do you think implementing something like this is possible?

Thank you and I look forward to your reply.

"Trenton Schulz" <[EMAIL PROTECTED]> wrote in message 
news:[EMAIL PROTECTED]
> On 2008-04-21 21:41:52 +0200, "Yan Shapochnik" <[EMAIL PROTECTED]> 
> said:
>
>> I am experiencing an issue with a simple JNI app on Mac OS X using the 
>> 4.4.0
>> Cocoa Port alpha and Mac OS X 10.5.2 w/ Apple's JVM 1.5.0_13-b05-237.
>>
>> The java application is a very simple Swing application. It displays a 
>> frame
>> with a button. Once the Swing button is clicked it makes a call via JNI 
>> to
>> the native library which uses Qt to attempt and display a QMessageBox
>> modally.
>>
>> Here is a code snippet from the native implementation:
>>
>> #include <QtCore>
>> #include <QtGui>
>>
>> #include "HelloWorldImp.h"
>>
>> JNIEXPORT void JNICALL Java_HelloWorld_displayHelloWorld(JNIEnv *env,
>> jobject obj)
>> {
>>    int argc = 0;
>>    char *argv[] = {""};
>>    QApplication *pqapp = new QApplication(argc, argv);
>>
>>    QMessageBox mb;
>>    mb.exec();
>> }
>>
>> When I click the Swing button and a call is made into native library, the
>> application crashes with the following error:
>>
>> 2008-04-21 15:15:09.301 java[29340:13a03] *** -[NSApplicationAWT
>> setQtPrivate:]: unrecognized selector sent to instance 0x125430
>> 2008-04-21 15:15:09.303 java[29340:13a03] An uncaught exception was 
>> raised
>> 2008-04-21 15:15:09.303 java[29340:13a03] *** -[NSApplicationAWT
>> setQtPrivate:]: unrecognized selector sent to instance 0x125430
>> 2008-04-21 15:15:09.304 java[29340:13a03] *** Terminating app due to
>> uncaught exception 'NSInvalidArgumentException', reason:
>> '*** -[NSApplicationAWT setQtPrivate:]: unrecognized selector sent to
>> instance 0x125430'
>
>
> Hi Yan,
>
> I suspect what is happening that Swing implements its own NSApplication 
> subclass, and so does Qt and there can be only one subclass in an 
> application. what is happening here is that the Swing subclass is created 
> before the Qt one, and when we try to use our subclass, it will through an 
> exception. I would assume you would have other issues if you created the 
> Qt subclass first and the swing version tried to call its extra methods.
>
> I've yet to get a good solution to this issue. I'm afraid for the time 
> being, you simply can't use the Cocoa with a swing Java app. :-(
>
> -- Trenton
> 


To unsubscribe - send "unsubscribe" in the subject to [EMAIL PROTECTED]

Reply via email to