我在Netbeans IDE中创建了两个小型Java应用程序,Say
App1 的课程第一如下
public class First{
public static void main(String... str){
First f = new First();
System.out.print(f.getValue());
}
public int getValue(){
return 10;
}
}
App2 的课程第二如下
public class Second {
public static void main(String... str){
try{
Class myClass = Class.forName("App1.First");
Method m = myClass.getDeclaredMethod("getValue",new Class[] {});
Object result = m.invoke(myClass,null);
System.out.println(result);
}catch(Exception e){
System.out.println(e);
}
}
}
我在Netbeans中运行了App1.First,之后我在Netbeans中运行了App2.Second。
OUTPUT: java.lang.ClassNotFoundException:App1.First
上面的代码不起作用。 我想从App2.second访问App1.First中的getValue方法。
我想知道我们是否可以从其他应用程序创建类的实例并在Java中执行它的方法?如果是,那么如何?
考虑 SecurityManager 未运行。请让我知道我在代码中的错误或理解概念。
我们将非常感谢您的回复。
感谢所有回复。如果Netbeans在不同的JVM中运行每个应用程序,那么我可以知道如何在JVM中运行其他应用程序已经运行的应用程序吗?
答案 0 :(得分:2)
不,你不能。
每个应用程序都有自己的JVM,它有自己的类路径,加载的类等。你不能(在纯Java中)直接从另一个类访问一个JVM的类。
您需要做的是将App1的类放在App2的类路径上 - 有maven之类的工具可以帮助您设置这些依赖项。如果这样做,两个JVM都将拥有每个类的单独副本;您可以确保两个副本完全相同(例如,确保每次重新部署App1时都重新部署App2)。您还需要为JVM设置一些相互通信的方式:设置套接字或类似方法,使用序列化格式(序列化类,protobufs等),两者都达成一致。 / p>
答案 1 :(得分:1)
首先。 当您启动2个不同的程序时,您有2个不同的JVM实例。每个JVM对另一个都不了解。
二。
当class不包含在classpath中时发生异常。您必须为项目App1
添加依赖项App2
,即将类App1
放入类路径App2
。
答案 2 :(得分:1)
如果App1和App2是两个不同的应用程序/项目,除非包含在类路径中,否则App2将不会看到APP1的类。
答案 3 :(得分:1)
每个应用程序在使用java命令运行时,都会在不同的JVM中启动。所以你不能在同一个JVM中使用这种方式加载类