- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
无论我做什么,我都无法创建类 Serwer 的新实例。请帮助,不知何故构造函数是不可见的。我不明白为什么会这样。构造函数是公开的,所有内容都编码在一个文件中。
我刚刚明白了:
java.rmi.StubNotFoundException: Stub class not found: Serwer_Stub; nested exception is:
java.lang.ClassNotFoundException: Serwer_Stub
at sun.rmi.server.Util.createStub(Unknown Source)
at sun.rmi.server.Util.createProxy(Unknown Source)
at sun.rmi.server.UnicastServerRef.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at java.rmi.server.UnicastRemoteObject.exportObject(Unknown Source)
at com.sun.corba.se.impl.javax.rmi.PortableRemoteObject.exportObject(Unknown Source)
at javax.rmi.PortableRemoteObject.exportObject(Unknown Source)
at javax.rmi.PortableRemoteObject.<init>(Unknown Source)
at Serwer.<init>(Serwer.java:13)
at Serwer.main(Serwer.java:35)
Caused by: java.lang.ClassNotFoundException: Serwer_Stub
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
... 10 more
类
import java.rmi.RemoteException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.Name;
import javax.rmi.PortableRemoteObject;
public class Serwer extends PortableRemoteObject implements MyInterface {
public Serwer() throws RemoteException {
super();
try{
Serwer ref =
new Serwer();
Context ctx = new InitialContext();
ctx.rebind("myinterfaceimplementacja", ref);
}catch(Exception e){e.printStackTrace();}
}
@Override
public String echo(String napis) throws RemoteException {
return "echo" + napis;
}
@Override
public int dodaj(int wrt1, int wrt2) throws RemoteException {
return wrt1 + wrt2;
}
public static void main(String[] args){
try {
new Serwer();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
最佳答案
您的代码中有两个错误。第一个是 Serwer
构造函数中明显的无限递归,您在其中一次又一次地调用构造函数。这可以通过从构造函数中删除该行并在以下行中将 ref
替换为 this
来解决:
public class Serwer extends PortableRemoteObject implements MyInterface {
public Serwer() throws RemoteException {
super();
}
@Override
public String echo(String napis) throws RemoteException {
return "echo" + napis;
}
@Override
public int dodaj(int wrt1, int wrt2) throws RemoteException {
return wrt1 + wrt2;
}
public static void main(String[] args){
try {
Serwer ref = new Serwer();
// Context ctx = new InitialContext();
// ctx.rebind("myinterfaceimplementacja", ref);
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
但是,此错误与您得到的 ClassNotFoundException
无关。导致异常的原因是您使用 PortableRemoteObject
作为远程实现的基类。通常在 Java RMI 中, stub 类 (Serwer_Stub
) 是在您导出(实例化)远程对象时自动生成的。但是 PortableRemoteObject
是这种情况的一个异常(exception)。您可以通过两种方式解决此问题:
按照 Kumar 的建议,将 javax.rmi.PortableRemoteObject
替换为 java.rmi.server.UnicastRemoteObject
。这样就自动创建了 stub 对象,上面的代码就可以顺利运行了,我测试过了。
public class Serwer extends UnicastRemoteObject implements MyInterface {
如果出于某种原因您必须使用 PortableRemoteObject
,那么您应该使用随附的 RMI 编译器 (rmic
) 工具手动生成 stub 类JDK。
首先,编译 Serwer
类:
javac Serwer.java
这将生成 Serwer.class
文件。然后调用 RMIC 工具生成 stub 类:
rmic Serwer
这将生成 Serwer_Stub.class
文件。现在你可以运行你的服务器了:
java Serwer
我也测试了这个,它启动没有任何异常。
请注意,您的代码中还有另一个使用 Java 命名的错误,导致另一个异常(NoInitialContextException
),但这也与问题无关,这就是为什么我在上面的代码。由于我不是 javax.naming
方面的专家,因此需要其他人来帮助您。
也许您打算使用 RMI 注册表而不是错误地使用 Naming。 RMI 注册表是在 Java RMI 中绑定(bind)和查找远程对象的 native 方法。在这种情况下,您应该更换
Context ctx = new InitialContext();
ctx.rebind("myinterfaceimplementacja", ref);
具有适当的 RMI 注册表代码的行:
Registry reg = LocateRegistry.createRegistry(1099);
reg.rebind("myinterfaceimplementacja", ref);
这将在标准端口 (1099) 上为您创建 RMI 注册表。如果你运行你的程序,注册表将被创建,你的远程对象将被导出并以给定的名称注册。
另一种方式是写
Registry reg = LocateRegistry.getRegistry();
这会让您的程序找到一个已经在运行的现有注册表。您必须在运行程序之前启动 RMI 注册表,方法是调用 remiregistry
工具,它也是 JDK 的一部分:
rmiregistry
现在您可以编译并启动您的程序了:
javac Serwer.java
java Serwer
它将启动并在注册表中注册您的远程对象实现,使其可供客户端查找。
关于java - 为什么在其源文件Java中看不到该类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10648026/
我有一个项目,其中包含两个源文件和一个头文件(其中包含名为 Get.c 的源文件之一中定义的函数的原型(prototype)),问题是: 当我在另一个源文件中包含 Get.c 时,它给出了错误 错误:
有没有尽可能多的语法结构的java源代码文件? java 编译器的某种测试文件。我需要该文件来测试 java 源代码解析器。 最佳答案 看看 Java Compatibility Kit ,特别Tec
尝试在命令提示符下编译时,我在使用 codeblocks-16.01mingw-setup.exe - 安装在路径不包含空格的文件中时遇到问题。初学者指南建议在命令提示符中使用以下行: gcc car
我编写了一个使用 Cryptopp 库的程序。我已经创建了静态库并将其包含在我的分发版中,但是该程序还需要很多头文件。我的问题是我需要在我的发行版中包含所有这些头文件吗? 例如,我编写了一个代码,其中
我在源代码树中有 protobuf 原型(prototype)文件。我想在每次更改和首次运行时从原型(prototype)文件生成源文件(例如,我创建新的原型(prototype)文件)。然后,我想从
我知道在 Java 中加载文件而不指定要使用的编码是平台相关的。但我的问题是关于 .java 源文件本身中包含的文本:用于这些文件的编码是否仍然相关一旦编译? 例如,如果我在 Windows 上有一个
编辑:{ 我想我在这里添加了很多(太多)信息(阅读)。我想要的是: 我正在使用一个网站(没有.csproj文件) 我需要多个源代码文件才能运行我的aspx 据我所知,当请求aspx文件时,我要么需要使
我从 Asio 的示例页面中获取了以下代码 class tcp_connection : public boost::enable_shared_from_this { public: t
我已经使用 VS2010 为我的 C++ 应用程序创建了一个 Windows 安装部署。但是我的问题是我不知道如何将我自己的一些代码压缩到安装向导中(这可能吗?)。问题是在安装过程中我想要: 要求用户
最近我创建了一个 bash 脚本,我应该在 cron 中运行它。 准备好bash脚本并正常运行后,我将其放入Cron中,发现它失败了。作为第二步,我删除了所有环境依赖项,即我指定的不是 file.tx
考虑以下场景 例子.txt: ÄäÖöÜü Java 源代码: try (FileInputStream fileInputStream = new FileInputStream("example.
背景我主要使用嵌入式 C/C++ 进行编程,但有时我必须为我们的 API 进行一些 C# 编程。为此,我使用 Visual Studio 2017 为我们的客户创建 API DLL。 C# API 和
这个问题在这里已经有了答案: ggplot's qplot does not execute on sourcing (1 个回答) 关闭 9 年前。 考虑这种形式的源文件: # initializ
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,因为
我需要读取一个 Racket 源文件并通过宏扩展来运行它。我有一个简单的测试文件,Racket 本身很乐意接受: C:\ayane>type factorial.rkt #lang racket (p
我的源文件位于此文件夹中:c:\data\mycompany。我的所有源文件的第一行都包含以下内容:package mycompany;现在,我从 c:\data 文件夹中使用以下命令编译了所有内容:
这个问题在这里已经有了答案: #include all .cpp files into a single compilation unit? (6 个回答) The benefits / disadv
我对这个 JAVA RMI 项目真的很陌生。我只是想知道我可以使用什么编译器来编译我的JAVA源代码?以及如何做到这一点? 我正在尝试编译来自 http://www.eg.bucknell.edu/~
我想使用 Subversion 并仅 check out 源文件(例如:仅 check out .c 、 .cpp 和 .h 文件)。这可能吗 ?如果是这样,我该怎么做? 我正在尝试从以下位置获取 w
有没有办法使用指向唯一头文件的不同配置(或不同方法)来设置单个项目。 我想创建一个包含两个头文件的 C 项目(例如 header1.h 和 header2.h)。在我的 .c 源文件中,我定义了两个配
我是一名优秀的程序员,十分优秀!