我目前正在测试Android上的远程演员。我做了一个包含两个类的小程序:第一个实现主要活动,第二个实现一个actor。
当我创建我的actor时,该程序被这条消息杀死:在调用Ljava / lang / throwable时堆栈溢出... 由于某种原因,程序的堆栈似乎太小(或者有某种程度的 在执行我的第二课程的第3行期间(如下所示)。
这是我的第二堂课的代码:
class Person(ip : String, port : Int) extends Actor{
val node = Node(ip, port)
var server = select(node, 'myName) // <'----- program crashes here
def act(){
while(true){
receive {
case Post(msg) => //do something
case Stop => exit()
}
}
}
}
anyboy是否知道这个错误或任何想法的解决方案或有在Android上运行远程actor的经验?
感谢
答案 0 :(得分:3)
我发现了问题!我查看了远程actor的来源,“TcpService”中的函数“generatePort”包含一个递归调用,找到一个空闲的套接字端口。 Android没有提供端口,因为... AndroidManifest.xml必须包含使用套接字的INTERNET权限。
我希望这个主题可以帮助某人
答案 1 :(得分:1)
Androids堆栈限制存在一些问题。例如,已知调度json库(http://dispatch.databinder.net/Lift-JSON)因为使用了解析器组合器而导致堆栈崩溃。
看一下这篇文章http://groups.google.com/group/android-developers/browse_thread/thread/d880c3d5777127d9。第二篇文章描述了如何通过此构造函数创建具有更大堆栈的线程:http://developer.android.com/reference/java/lang/Thread.html#Thread%28java.lang.ThreadGroup,%20java.lang.Runnable,%20java.lang.String,%20long%29