0

我在 Netbeans IDE 中创建了两个小型 Java 应用程序,说

App1有类First如下

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。

输出: java.lang.ClassNotFoundException:App1.First

上面的代码不起作用。我想从 App2.second 访问 App1.First 中的 getValue 方法。

我想知道我们是否可以从其他应用程序创建类的实例并在 Java 中执行它的方法?如果是,那么如何?
考虑SecurityManager没有运行。请让我知道我在代码或理解概念方面做错了什么。

您的回复将不胜感激。

感谢所有的回复。如果 Netbeans 在不同的 JVM 中运行每个应用程序,那么我可以知道我们如何在 JVM 中运行其他应用程序已经运行的应用程序吗?

4

4 回答 4

2

No, you can't.

Each application has its own JVM, with its own class path, loaded classes, etc. You can't (within pure Java) access one JVM's classes directly from another class.

What you'd need to do is to put App1's classes on the classpath for App2 -- there are tools such as maven that help you set these dependencies up. If you do that, both JVMs will have a separate copy of each class; it's up to you to make sure that both copies are identical (for instance, by making sure you redeploy App2 every time you redeploy App1). You'll also need to set up some way for the JVMs to communicate to each other: set up a socket or some similar approach, with a serialization format (serialized classes, protobufs, etc) that both agree on.

于 2013-10-28T14:30:18.517 回答
1

如果 App1 和 App2 是两个不同的应用程序/项目,则 App2 将看不到 APP1 的类,除非包含在类路径中。

于 2013-10-28T14:32:44.653 回答
1

第一的。当您启动 2 个不同的程序时,您有 2 个不同的 JVM 实例。每个 JVM 都不知道另一个。

第二。当类不包含在类路径中时会发生异常。App1您必须为项目添加依赖项,即将App2类 fromApp1到 classpath App2

于 2013-10-28T14:28:02.363 回答
1

当您使用 java 命令运行每个应用程序时,它会在不同的 JVM 中启动。所以你不能在同一个JVM中使用这种方式加载类

于 2013-12-13T12:22:54.970 回答