如何在斯卡拉等待。如果发生任何事件,我有一位正在收听的听众。 Listener
将处理事件并需要监听,直到应用程序关闭。斯卡拉无尽的等待
在Java中,我通过实例化一个新线程来实现这一点,启动监听器并将其置于“等待”状态。
Object o = new Object();
synchronized(o) { o.wait(); }
但是,当我做同样的斯卡拉(创建一个线程,并把它在等待),该Listener
不接收,不处理的事件。
我们如何在Scala中实现这一点?
我使用snmp4j来侦听并处理陷阱到管理器。
代码段:
def listen() {
synchronized {
val address = new UdpAddress("127.0.0.1/2221")
val transport: DefaultUdpTransportMapping = new efaultUdpTransportMapping()
val msDispatcher: MessageDispatcher = new MessageDispatcherImpl
msDispatcher.addMessageProcessingModel(new MPv2c)
SecurityProtocols.getInstance.addDefaultProtocols()
SecurityProtocols.getInstance.addPrivacyProtocol(new Priv3DES)
val target = new CommunityTarget()
target.setCommunity(new OctetString("public"))
val snmp: Snmp = new Snmp(msDispatcher, transport)
snmp.addCommandResponder(this)
println(" listening on ..." + snmpDevice.host)
transport.listen()
this.wait(1000 * 60)
}
}
override def processPdu(cmdRespEvent: CommandResponderEvent): Unit = {
synchronized {
println("inside process pdu")
val pdu: PDU = cmdRespEvent.getPDU()
if (pdu != null) {
println(" Trap Type = " + pdu.getType())
println(" Variable Bindings = " + pdu.getVariableBindings())
// int pduType = pdu.getType()
if (pdu != null && pdu.getType() == PDU.INFORM) {
// procees the event
}
}
}
}
您需要添加最少的代码示例,以显示您的问题,但没有很难知道为什么会出现此问题。 – Jackson
'val o = new Object synchronized( o.wait() )''会工作相同。你需要显示更多的代码。 – Jatin
我已经在java的listen方法中使用this.wait(),正在工作,如果发生任何事件,处理也。 但在斯卡拉同样没有回应 – kin