Java 无法从外部包导入/引用类

Java 无法从外部包导入/引用类,java,eclipse,kryonet,Java,Eclipse,Kryonet,我有两个包mg.networktest和mg.networktest.server,它们都需要访问同一个类,以便注册/序列化需要通过网络发送的类。我认为最好的做法是在服务器包上创建它,并将其包含在客户机中 但是,我无法正确引用该类。我还尝试添加另一个包,但我认为这是不允许的。但它就是不认识我的另一个包裹。下面的导入都得到导入mg.networktest.server无法解析。我可以把它拿到import mg.networktest.*但这只是引用它自己 import mg.networktest

我有两个包mg.networktest和mg.networktest.server,它们都需要访问同一个类,以便注册/序列化需要通过网络发送的类。我认为最好的做法是在服务器包上创建它,并将其包含在客户机中

但是,我无法正确引用该类。我还尝试添加另一个包,但我认为这是不允许的。但它就是不认识我的另一个包裹。下面的导入都得到导入mg.networktest.server无法解析。我可以把它拿到
import mg.networktest.*但这只是引用它自己

import mg.networktest.server; //This is the exact package
import mg.networktest.server.Network; //This is the physical class/.java name
import mg.networktest.server.Network.ChatMessage; //This is one of the classes inside the .java that needs to be included.
更清楚地说:

  • 包1:(mg.networktest.server)有一个Network.java和ChatMessage类
  • 包2:(mg.networktest)需要来自包1的类ChatMessage
  • 包2:(mg.networktest)无法执行:
    import mg.network.server.*
  • 如何在包2中(mg.networktest)访问包1(mg.networktest.server)中的ChatMessage类

如果导入语句导致编译错误,请验证以下内容:

  • 您使用了正确的语法。对于单个类型名称,请使用语法
    import-TypeName。要根据需要从包或类作用域导入类型名称,请使用语法
    import-PackageOrTypeName.*
  • 您已命名了当前存在的包和/或类。检查路径,并检查拼写
  • 如果导入的类位于不同的Eclipse项目或库中,请验证它是否位于导入类的项目的生成路径上
  • 重新生成包含导入类和导入类的项目。通常,如果已启用自动生成,则无需执行此操作

如果导入语句导致编译错误,请验证以下内容:

  • 您使用了正确的语法。对于单个类型名称,请使用语法
    import-TypeName。要根据需要从包或类作用域导入类型名称,请使用语法
    import-PackageOrTypeName.*
  • 您已命名了当前存在的包和/或类。检查路径,并检查拼写
  • 如果导入的类位于不同的Eclipse项目或库中,请验证它是否位于导入类的项目的生成路径上
  • 重新生成包含导入类和导入类的项目。通常,如果已启用自动生成,则无需执行此操作

如果导入语句导致编译错误,请验证以下内容:

  • 您使用了正确的语法。对于单个类型名称,请使用语法
    import-TypeName。要根据需要从包或类作用域导入类型名称,请使用语法
    import-PackageOrTypeName.*
  • 您已命名了当前存在的包和/或类。检查路径,并检查拼写
  • 如果导入的类位于不同的Eclipse项目或库中,请验证它是否位于导入类的项目的生成路径上
  • 重新生成包含导入类和导入类的项目。通常,如果已启用自动生成,则无需执行此操作

如果导入语句导致编译错误,请验证以下内容:

  • 您使用了正确的语法。对于单个类型名称,请使用语法
    import-TypeName。要根据需要从包或类作用域导入类型名称,请使用语法
    import-PackageOrTypeName.*
  • 您已命名了当前存在的包和/或类。检查路径,并检查拼写
  • 如果导入的类位于不同的Eclipse项目或库中,请验证它是否位于导入类的项目的生成路径上
  • 重新生成包含导入类和导入类的项目。通常,如果已启用自动生成,则无需执行此操作

我试图重建您当前的项目结构。这是我的
网络
类和内部类
聊天信息

package mg.networktest.server;

public class Network {

  public class ChatMessage {
    public void message() {
      System.out.println("Blub");
    }
  }
}
这是我在package
mg.networktest
中的类,它需要
ChatMessage

package mg.networktest;

import mg.networktest.server.Network;
import mg.networktest.server.Network.ChatMessage;

class NeedChatMessage {
  public static void main(String args[]) {
    final Network network = new Network();
    final ChatMessage chatMessage = network.new ChatMessage();
    chatMessage.message();
  }
}
您需要导入父类
Network
和内部类
ChatMessage
,以便在此处使用内部类。 现在,您需要先创建父类
Network
的一个新实例,才能使用该实例访问内部类。可以检查此问题和答案,以找到创建内部类的新实例的其他方法

p.S.

您还可以将内部类
ChatMessage
设置为静态

public static class ChatMessage {
    public void message() {
        System.out.println("Blub");
    }
}
现在您不再需要
网络
类来访问内部类

import mg.networktest.server.Network.ChatMessage;

class NeedChatMessage {
  public static void main(String args[]) {
    final ChatMessage chatMessage = new ChatMessage();
    chatMessage.message();
  }
}

我试图重建您当前的项目结构。这是我的
网络
类和内部类
聊天信息

package mg.networktest.server;

public class Network {

  public class ChatMessage {
    public void message() {
      System.out.println("Blub");
    }
  }
}
这是我在package
mg.networktest
中的类,它需要
ChatMessage

package mg.networktest;

import mg.networktest.server.Network;
import mg.networktest.server.Network.ChatMessage;

class NeedChatMessage {
  public static void main(String args[]) {
    final Network network = new Network();
    final ChatMessage chatMessage = network.new ChatMessage();
    chatMessage.message();
  }
}
您需要导入父类
Network
和内部类
ChatMessage
,以便在此处使用内部类。 现在,您需要先创建父类
Network
的一个新实例,才能使用该实例访问内部类。可以检查此问题和答案,以找到创建内部类的新实例的其他方法

p.S.

您还可以将内部类
ChatMessage
设置为静态

public static class ChatMessage {
    public void message() {
        System.out.println("Blub");
    }
}
现在您不再需要
网络
类来访问内部类

import mg.networktest.server.Network.ChatMessage;

class NeedChatMessage {
  public static void main(String args[]) {
    final ChatMessage chatMessage = new ChatMessage();
    chatMessage.message();
  }
}

我试图重建您当前的项目结构。这是我的
网络
类和内部类
聊天信息

package mg.networktest.server;

public class Network {

  public class ChatMessage {
    public void message() {
      System.out.println("Blub");
    }
  }
}
这是我在package
mg.networktest
中的类,它需要
ChatMessage

package mg.networktest;

import mg.networktest.server.Network;
import mg.networktest.server.Network.ChatMessage;

class NeedChatMessage {
  public static void main(String args[]) {
    final Network network = new Network();
    final ChatMessage chatMessage = network.new ChatMessage();
    chatMessage.message();
  }
}
您需要导入父类