1

我是一个新的 android 开发人员,目前我正在尝试在 andorid 中实现 JSIP。当我在andorid中添加jsip api时,一个错误告诉我jsip的javax包与java的默认javax包冲突。

所以我把所有的javax包都改成了com.g5.javax.*这种格式。然后错误消失。但现在又出现了另一个错误,我附上了这条消息。它向我抛出 java.lang.reflect.InvocationTargetException 和 javax.sip.PeerUnavailableException: stack name is missing 错误。我检查并仔细检查了 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)
4

3 回答 3

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 是从其他地方获取的。问题是我不知道在哪里,我已经在整个项目中搜索了那个错误,这是它唯一存在的地方,所以它一定来自某个地方(即使注释掉错误检测仍然会留下错误)。这就是我现在卡住的地方,希望这会有所帮助,如果你发现任何额外的东西,请告诉我

于 2012-11-11T20:56:08.740 回答
0

刚刚完成它可以在 Android 4.4.2 上运行。

我相信的第一件事就是做你所做的。例如,您将javax名称空间更改为其他内容:whatever.javax.*

然后我遇到了 Martin 在他的回答中提到的同样的问题,我很感谢他在 SO 上所说的话。看起来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");

正如迈克在此答案中指出的那样,应用程序中的某处。

毕竟,我遇到NoClassFoundError了类异常的问题org.apache.log4j.Logger,即使我的类路径中有相应的 jar。因此,我将所有 jar 从“asset”项目目录移到了一个名为“libs”的新目录中。用新的目录方案重新配置了我的项目的类路径,它就像一个魅力(好的,没有夸大其词)。

于 2014-07-24T11:44:31.310 回答
0

您需要在属性中为键javax.sip.STACK_NAME设置一个名称

properties.setProperty("javax.sip.STACK_NAME", "myStack");
于 2015-07-06T13:00:11.207 回答