プロが教えるわが家の防犯対策術!

JavaとObjective-c間でJNIを使用してGUIのアプリケーション連携を行いたいのですが
エラーになってしまいます。
アプリケーションの起動をNSApplicationMain関数を使用してしようとしてるのですが、
JNIの関数では使用できないのでしょうか?
一部抜粋ですが、以下のように呼び出しています。
また、このように連携を行いたい場合、どのようにするべきでしょうか?
ご教授ください。
JNIEXPORT void JNICALL Java_JniApp_start
(JNIEnv *env, jobject this)
{
int argc = 0;
char *argv[0];
NSApplicationMain(argc, (const char**)argv);
}
こちらをJava側で呼び出すとエラーとなります。
エラー内容は以下になります。
java[1646:1303] No Info.plist file in application bundle or no NSPrincipalClass in the Info.plist file, exiting

A 回答 (2件)

Objective-CというよりはCocoaの話だと思うんですが、JNIの話はひとまず置いといて


int main(int argc, char **argv)
{
int ac = 0;
const char *av[0];
return NSApplicationMain(ac, av);
}
で、動作するアプリケーションは作れるんでしょうか?
私はObjective-CもCocoaも知らないのですが、av[0]にある文字列を元に動作するのに必要な設定ファイル名を求めてたりしてそうな気がするんですけど。

この回答への補足

回答ありがとうございます。
質問いただいている形で動作するアプリケーションはつくれます。動作確認済みです。
av[0]は、起動引数なだけで、他に設定などを指定していることはありませんでした。
アプリケーション動作に必要になる設定などは、アプリケーションパッケージ内に配置されており、
NSApplicationMainでそれを読み込んで動作するようなんですが。。。
JNIとして作成したダイナミックライブラリ(Macなのでjnilib)にはNSApplicationMainで必要とする設定ファイルをもっていないので
動作するアプリケーションに配置されている設定ファイルなどを様々な場所に配置してみるのですが
配置位置が悪いのか、読み込まれないのか、同じエラーで動作しませんでした。

補足日時:2012/07/22 20:04
    • good
    • 0
この回答へのお礼

NSApplicationMain(ac, av);
この関数を使用すると中で、画面描画などの処理が行われるようですが、
それに必要な設定や値は結局引数や設定ファイルの配置ではどうにもなりませんでした。
Java側でawtを使用して、そのスレッドにNSWindowをのせWebViewで読み込みとすればブラウザは機能することがわかりました。
まだ完全にシステムは完成していませんが、一旦ココで締切としようと思います。
ご協力ありがとうございました。

お礼日時:2012/08/20 14:19

>アプリケーション動作に必要になる設定などは、アプリケーションパッケージ内に配置されており、


>NSApplicationMainでそれを読み込んで動作するようなんですが。。。

ということはNSApplicationMainは第1引数, 第2引数以外の何らかの手段でアプリケーションパッケージの場所を特定しているという事ですよね。
それがどのような手段なのか調べてみるのがいいのかもしれませんね。

役に立つかどうかわからない回答ですいません。
    • good
    • 0
この回答へのお礼

引き続きご回答ありがとうございます。
wormholeさんがおっしゃるように引数とは別の手段で描画、他クラスの呼び出しに必要な設定を得ているようです。
その手段というのがどのようなのか、引き続き調べてみます。
お答えいただいて嬉しいです。
ありがとうございます。

お礼日時:2012/07/22 22:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!