2012-09-27 103 views
1

我是一名新的android開發人員,目前我正在嘗試在andorid中實現JSIP。當我在andorid中添加jsip api時,出現一個錯誤,告訴我jsip的javax包與java默認的javax包衝突。Android上的JAIN SIP和java.lang.reflect.InvocationTargetException

因此,我已將所有javax包更改爲com.g5.javax。*此格式。那麼錯誤就會消失。但現在又出現了另一個我附加了這條消息的錯誤。它拋出java.lang.reflect.InvocationTargetException與javax.sip.PeerUnavailableException:堆棧名稱丟失錯誤。我檢查並重新檢查了jain sip源,發現屬性鍵「com.g5.javax.sip.STACK_NAME」(通過使用eclipse重構而改變)具有我給出的值。但每次都出現錯誤。另一個有趣的信息是我創建的相同jar包在桌面應用程序中完美工作。我堅持了2天的這個錯誤。

09-27 04:58:13.819: I/System.out(564): class java.util.Properties 
09-27 04:58:13.839: I/System.out(564): {com.g5.javax.sip.STACK_NAME=123} 
09-27 04:58:13.869: E/com.g5(564): cannot instantiate 
09-27 04:58:13.869: E/com.g5(564): com.g5.javax.sip.PeerUnavailableException: The Peer SIP Stack: gov.nist.javax.sip.SipStackImpl could not be instantiated. Ensure the Path Name has been set. 
09-27 04:58:13.869: E/com.g5(564): at com.g5.javax.sip.SipFactory.createStack(SipFactory.java:332) 
09-27 04:58:13.869: E/com.g5(564): at com.g5.javax.sip.SipFactory.createSipStack(SipFactory.java:154) 
09-27 04:58:13.869: E/com.g5(564): at com.shootme.Shootme.init(Shootme.java:104) 
09-27 04:58:13.869: E/com.g5(564): at com.shootme.Shootme.onCreate(Shootme.java:87) 
09-27 04:58:13.869: E/com.g5(564): at android.app.Activity.performCreate(Activity.java:4465) 
09-27 04:58:13.869: E/com.g5(564): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
09-27 04:58:13.869: E/com.g5(564): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1920) 
09-27 04:58:13.869: E/com.g5(564): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1981) 
09-27 04:58:13.869: E/com.g5(564): at android.app.ActivityThread.access$600(ActivityThread.java:123) 
09-27 04:58:13.869: E/com.g5(564): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1147) 
09-27 04:58:13.869: E/com.g5(564): at android.os.Handler.dispatchMessage(Handler.java:99) 
09-27 04:58:13.869: E/com.g5(564): at android.os.Looper.loop(Looper.java:137) 
09-27 04:58:13.869: E/com.g5(564): at android.app.ActivityThread.main(ActivityThread.java:4424) 
09-27 04:58:13.869: E/com.g5(564): at java.lang.reflect.Method.invokeNative(Native Method) 
09-27 04:58:13.869: E/com.g5(564): at java.lang.reflect.Method.invoke(Method.java:511) 
09-27 04:58:13.869: E/com.g5(564): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
09-27 04:58:13.869: E/com.g5(564): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
09-27 04:58:13.869: E/com.g5(564): at dalvik.system.NativeStart.main(Native Method) 
09-27 04:58:13.869: E/com.g5(564): Caused by: java.lang.reflect.InvocationTargetException 
09-27 04:58:13.869: E/com.g5(564): at java.lang.reflect.Constructor.constructNative(Native Method) 
09-27 04:58:13.869: E/com.g5(564): at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
09-27 04:58:13.869: E/com.g5(564): at com.g5.javax.sip.SipFactory.createStack(SipFactory.java:322) 
09-27 04:58:13.869: E/com.g5(564): ... 17 more 
09-27 04:58:13.869: E/com.g5(564): Caused by: javax.sip.PeerUnavailableException: stack name is missing 
09-27 04:58:13.869: E/com.g5(564): at gov.nist.javax.sip.SipStackImpl.<init>(SipStackImpl.java:554) 

回答

1

我也有同樣的問題,所以我試圖深入一點,因爲堆棧的執行錯誤沒有被報告。從這我得到這個錯誤:

11-11 18:51:01.025: W/System.err(17454): javax.sip.PeerUnavailableException: stack name is missing 
11-11 18:51:01.025: W/System.err(17454): at gov.nist.javax.sip.SipStackImpl.<init>(SipStackImpl.java:554) 
11-11 18:51:01.025: W/System.err(17454): at not.javax.sip.SipFactory.createStack(SipFactory.java:322) 
11-11 18:51:01.025: W/System.err(17454): at not.javax.sip.SipFactory.createSipStack(SipFactory.java:171) 
11-11 18:51:01.025: W/System.err(17454): at org.jaintest.MainActivity.init(MainActivity.java:110) 
11-11 18:51:01.025: W/System.err(17454): at org.jaintest.MainActivity.onCreate(MainActivity.java:68) 
11-11 18:51:01.025: W/System.err(17454): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
11-11 18:51:01.025: W/System.err(17454): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
11-11 18:51:01.025: W/System.err(17454): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
11-11 18:51:01.025: W/System.err(17454): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
11-11 18:51:01.025: W/System.err(17454): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
11-11 18:51:01.025: W/System.err(17454): at android.os.Handler.dispatchMessage(Handler.java:99) 
11-11 18:51:01.025: W/System.err(17454): at android.os.Looper.loop(Looper.java:123) 
11-11 18:51:01.025: W/System.err(17454): at android.app.ActivityThread.main(ActivityThread.java:3691) 
11-11 18:51:01.025: W/System.err(17454): at java.lang.reflect.Method.invokeNative(Native Method) 
11-11 18:51:01.025: W/System.err(17454): at java.lang.reflect.Method.invoke(Method.java:507) 
11-11 18:51:01.025: W/System.err(17454): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
11-11 18:51:01.025: W/System.err(17454): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
11-11 18:51:01.025: W/System.err(17454): at dalvik.system.NativeStart.main(Native Method) 

現在繼承人的問題。我看了SipStackImpl類的代碼,發現這些行:

String name = configurationProperties 
    .getProperty("com.tlccom.javax.sip.STACK_NAME"); 
if (name == null) 
    throw new PeerUnavailableException("stack name is missing"); 

所以這意味着名稱不被拾取。所以我給這個名字一個字符串值,但仍然有錯誤,這導致我相信SipStackImpl從其他地方被拾取。問題是我不知道在哪裏,我已經搜索了整個項目的錯誤,這是它存在的唯一地方,所以它必須來自某處(甚至註釋錯誤檢測仍然會導致錯誤)。這就是我現在卡住了,希望這有助於,如果你發現任何額外的讓我知道

+0

嘿馬丁。我已經成功地實現了jain sip在android sdk版本4中,但是在像android 10這樣的更新的sdk vrsion中,它再次出現。 –

0

剛剛完成它在Android 4.4.2上工作。

我相信的第一件事就是做你所做的事情。例如,您將javax名稱空間更改爲其他名稱:whatever.javax.*

然後我馬丁在他的回答中提到了同樣的問題,我很感謝他在這裏的話。看起來gov.nist名稱空間在運行時也出現在別的地方。所以我所做的是:gov.nist.*名稱空間更改爲gov.nist.whatever(以及所有對它的引用,偏離課程)。

另外,您需要在某處提供屬性"gov.nist.whatever.javax.sip.STACK_NAME"。你可以這樣做,使用:

Properties properties = new Properties(); 
properties.setProperty("sipper.sip.STACK_NAME", "stack"); 

某處的應用程序,如this answer指出的邁克。

畢竟,我有NoClassFoundError例外與org.apache.log4j.Logger類的問題,即使我的類路徑中各自的罐子。 所以我把所有的「資產」項目目錄下的jar文件移動到一個叫做「libs」的新文件夾中。用新的目錄方案重新配置我的項目的類路徑,它的功能就像一個魅力(OK,沒有誇大其詞)。

0

您需要在鍵盤javax.sip的屬性中設置名稱。STACK_NAME

properties.setProperty("javax.sip.STACK_NAME", "myStack"); 
相關問題