【问题标题】:Java, Import Class From FileJava,从文件导入类
【发布时间】:2015-03-17 02:59:48
【问题描述】:

我正在编写一个 java 程序,并希望创建一个可以调用的类以快速记录到 cmd(我仍处于测试阶段,正在解决问题)。我有一个文件和一个文件夹,里面还有另一个文件。

  • LaunchProgram.java
  • helping
    • Dbg.class
    • Dbg.java

LaunchProgram.class的总结内容(相关的东西):

import helping.Dbg;

public class LaunchProgram{
    public static void main(String[] args){
        Dbg("Testing");
    }
}

Dbg.class的内容:

package helping;

public class Dbg{
    public static void main(String message){
        System.out.println(message);
    }
}

当我在 cmd 中执行 javac Dbg.java 时,它运行时没有任何错误,生成 Dbg.class

当我在 cmd 中执行 javac LaunchProgram.java 时,出现以下错误:

LaunchProgram.java:5: error: cannot find symbol
                Dbg("Testing");
                ^
symbol:   method Dbg(String)
location: class LaunchProgram

我不确定是什么原因导致了这个问题,我已经到处寻找这个问题,但找不到解决方案。有谁知道是什么导致了这个问题以及如何解决它?

【问题讨论】:

    标签: java windows class import


    【解决方案1】:
    1. Dbg 是一个类,而不是一个方法,因为它是一个辅助类,它不会有自己的 main() 方法。相反,它应该有类似 log 的方法来记录日志并由其他类调用。

    2. 我怀疑您没有正确编译代码。您需要在包含LaunchProgram.java 和目录helping 的目录中执行此操作:

      javac helping/Dbg.java
      javac LaunchProgram.java
      

      实际上你根本不需要第一行。第二行将编译这两个类。这两个命令都会将相应的 .class 文件放入正确的目录中。然后运行它:

      java LaunchProgram
      

    基本上,您应该始终位于包结构头部的目录中。

    【讨论】:

    • 所以当我编译 Dbg.java 时,我不应该从它所在的文件夹编译它,而是从 LaunchProgram 所在的文件夹编译它,并且可以通过编译 LaunchProgram 来完成所有工作。 . 这很有帮助。我会看看这个并尝试一下。
    • 这行得通,非常感谢,但另一个答案解决了实际代码中的一个问题,如果没有这个问题,即使使用这个解决方案我也无法编译。如果我在没有它的情况下使用他的解决方案,你解决了我会遇到的问题。我不知道我是否能够 +1,因为我没有足够的声誉......但是谢谢。编辑 - 我做了 +1,看起来它现在可以工作了。
    【解决方案2】:

    这是您尝试执行的更正代码:

    public class LaunchProgram {
        public static void main(String[] args){
            Dbg.log("Testing");
        }
    }
    
    public class Dbg {
        public static void log(String message){
            System.out.println(message);
        }
    }
    

    但是 Apache log4j 是一种更好的方式来登录您的应用程序。这是您的 LaunchProgram 类的框架代码,它使用 log4j 记录消息:

    import org.apache.logging.log4j.LogManager;
    import org.apache.logging.log4j.Logger;
    
    public class LaunchProgram {
        static final Logger logger = LogManager.getLogger(LaunchProgram.class.getName());
    
        public static void main(String[] args){
            logger.info("Testing");
        }
    }
    

    请注意,您不需要单独的班级来记录,而是可以直接从需要记录消息的班级登录。

    【讨论】:

    • 我要调查一下。遗憾的是,我无法选择两个答案,它们都非常好......我要试试这个,看看会发生什么。
    • 这与其他答案一起解决了这个问题。这个解决了整个问题,但我相信如果我不遵循 EJP 的回答,会导致另一个错误。由于这个解决了大部分问题,我将其标记为答案。谢谢!
    猜你喜欢
    • 2011-04-16
    • 2013-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    • 1970-01-01
    • 2017-04-29
    • 2011-12-17
    • 1970-01-01
    相关资源
    最近更新 更多