java jini dll_java - Jini / JavaSpaces发现错误 - 堆栈内存溢出

我在Eclipse中编写了这些类,并启动了Launch-All脚本和Run示例。 有用。 之后,我将这些类导出到可执行的jar(JavaSpaceClient.jar)中,并使用以下命令尝试了该jar:java -jar JavaSpaceClient.jar它运行良好,给了我结果:搜索JavaSpace ...已发现JavaSpace。 将消息写入空间...从空间读取消息...读取的消息是:ЗдравоJavaSpaceсвете!

我的问题是当我在另一台LAN计算机上移动此jar文件时,当我键入相同的命令时,它向我显示错误。 这是错误:

cica@cica-System-Name:~/Desktop$ java -jar JavaSpaceClient.jar

Searching for a JavaSpace...

Jul 27, 2011 11:20:54 PM net.jini.discovery.LookupDiscovery$UnicastDiscoveryTask run

INFO: exception occurred during unicast discovery to biske-Inspiron-1525:4160 with constraints InvocationConstraints[reqs: {}, prefs: {}]

java.net.UnknownHostException: biske-Inspiron-1525

at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:175)

at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:384)

at java.net.Socket.connect(Socket.java:546)

at java.net.Socket.connect(Socket.java:495)

at com.sun.jini.discovery.internal.MultiIPDiscovery.getSingleResponse(MultiIPDiscovery.java:134)

at com.sun.jini.discovery.internal.MultiIPDiscovery.getResponse(MultiIPDiscovery.java:75)

at net.jini.discovery.LookupDiscovery$UnicastDiscoveryTask.run(LookupDiscovery.java:1756)

at net.jini.discovery.LookupDiscovery$DecodeAnnouncementTask.run(LookupDiscovery.java:1599)

at com.sun.jini.thread.TaskManager$TaskThread.run(TaskManager.java:331)

我只写了“正在搜索JavaSpace ...”,过了一会儿就会打印这些错误消息。 有人可以帮我解决这个错误吗?

编辑:为了发现我正在使用我在Internet上找到的LookupDiscovery类:

import java.io.IOException;

import java.rmi.RemoteException;

import net.jini.core.lookup.ServiceRegistrar;

import net.jini.core.lookup.ServiceTemplate;

import net.jini.discovery.LookupDiscovery;

import net.jini.discovery.DiscoveryListener;

import net.jini.discovery.DiscoveryEvent;

/**

A class which supports a simple JINI multicast lookup. It doesn't register

with any ServiceRegistrars it simply interrogates each one that's

discovered for a ServiceItem associated with the passed interface class.

i.e. The service needs to already have registered because we won't notice

new arrivals. [ServiceRegistrar is the interface implemented by JINI

lookup services].

@todo Be more dynamic in our lookups - see above

@author Dan Creswell (dan@dancres.org)

@version 1.00, 7/9/2003

*/

public class Lookup implements DiscoveryListener {

private ServiceTemplate theTemplate;

private LookupDiscovery theDiscoverer;

private Object theProxy;

/**

@param aServiceInterface the class of the type of service you are

looking for. Class is usually an interface class.

*/

public Lookup(Class aServiceInterface) {

Class[] myServiceTypes = new Class[] {aServiceInterface};

theTemplate = new ServiceTemplate(null, myServiceTypes, null);

}

/**

Having created a Lookup (which means it now knows what type of service

you require), invoke this method to attempt to locate a service

of that type. The result should be cast to the interface of the

service you originally specified to the constructor.

@return proxy for the service type you requested - could be an rmi

stub or an intelligent proxy.

*/

Object getService() {

synchronized(this) {

if (theDiscoverer == null) {

try {

theDiscoverer =

new LookupDiscovery(LookupDiscovery.ALL_GROUPS);

theDiscoverer.addDiscoveryListener(this);

} catch (IOException anIOE) {

System.err.println("Failed to init lookup");

anIOE.printStackTrace(System.err);

}

}

}

return waitForProxy();

}

/**

Location of a service causes the creation of some threads. Call this

method to shut those threads down either before exiting or after a

proxy has been returned from getService().

*/

void terminate() {

synchronized(this) {

if (theDiscoverer != null)

theDiscoverer.terminate();

}

}

/**

Caller of getService ends up here, blocked until we find a proxy.

@return the newly downloaded proxy

*/

private Object waitForProxy() {

synchronized(this) {

while (theProxy == null) {

try {

wait();

} catch (InterruptedException anIE) {

}

}

return theProxy;

}

}

/**

Invoked to inform a blocked client waiting in waitForProxy that

one is now available.

@param aProxy the newly downloaded proxy

*/

private void signalGotProxy(Object aProxy) {

synchronized(this) {

if (theProxy == null) {

theProxy = aProxy;

notify();

}

}

}

/**

Everytime a new ServiceRegistrar is found, we will be called back on

this interface with a reference to it. We then ask it for a service

instance of the type specified in our constructor.

*/

public void discovered(DiscoveryEvent anEvent) {

synchronized(this) {

if (theProxy != null)

return;

}

ServiceRegistrar[] myRegs = anEvent.getRegistrars();

for (int i = 0; i < myRegs.length; i++) {

ServiceRegistrar myReg = myRegs[i];

Object myProxy = null;

try {

myProxy = myReg.lookup(theTemplate);

if (myProxy != null) {

signalGotProxy(myProxy);

break;

}

} catch (RemoteException anRE) {

System.err.println("ServiceRegistrar barfed");

anRE.printStackTrace(System.err);

}

}

}

/**

When a ServiceRegistrar "disappears" due to network partition etc.

we will be advised via a call to this method - as we only care about

new ServiceRegistrars, we do nothing here.

*/

public void discarded(DiscoveryEvent anEvent) {

}

}

我的客户端程序仅尝试搜索JavaSpaces服务并将MessageEntry写入其中,然后检索消息并将其打印出来。 这是客户端程序:

import net.jini.space.JavaSpace;

public class SpaceClient {

public static void main(String argv[]) {

try {

MessageEntry msg = new MessageEntry();

msg.content = "Hello JavaSpaces wordls!";

System.out.println("Searching for JavaSpaces...");

Lookup finder = new Lookup(JavaSpace.class);

JavaSpace space = (JavaSpace) finder.getService();

System.out.println("JavaSpaces discovered.");

System.out.println("Writing into JavaSpaces...");

space.write(msg, null, 60*60*1000);

MessageEntry template = new MessageEntry();

System.out.println("Reading message from JavaSpaces...");

MessageEntry result = (MessageEntry) space.read(template, null, Long.MAX_VALUE);

System.out.println("Message: "+result.content);

} catch(Exception e) {

e.printStackTrace();

}

}

}

当然,这是MessageEntry类:

import net.jini.core.entry.*;

public class MessageEntry implements Entry {

public String content;

public MessageEntry() {

}

public MessageEntry(String content) {

this.content = content;

}

public String toString() {

return "MessageContent: " + content;

}

}

EDIT2:我确实在两台Windows计算机上进行了发现。 之后,我尝试使用Windows-Ubuntu combiantion,但它不起作用。 也许有一些网络问题? 当我互相ping通时,一切正常。 也许Ubuntu上存在一些DNS问题。

EDIT3:Windows-如果在Windows上启动JavaSpaces服务并且在Ubuntu上运行客户端程序,则可以使用Ubuntu组合。 当我尝试进行反向操作时,在Ubuntu上运行JavaSpaces服务并在Windows上运行客户端会发生错误。 显然,Ubuntu存在一些问题。 Ubuntu已安装了默认安装的OpenJDK。 我安装了Oracle JDK,并设置了JAVA_HOME并将JAVA_HOME / bin放入PATH变量中。 我想知道不同版本的Java可能存在一些问题,也许我没有使用正确的版本。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值