无法看到同一包中已编译类的静态方法

问题描述 投票:0回答:1

我想为调试模式定义一个带有静态标志的类,程序中的对象可以看到并相应地输出调试信息。 “ Option”类没有依赖关系,我首先对其进行编译。 (全部来自命令行/ .bat文件)Option类可以编译,但是引用该类的类将不会编译出“找不到符号”错误。

//Options - holds options for code, including debug modes, getters, setters
package UserViewer;

public class Option {

    private static boolean debug1 = false;
    private static boolean debug2 = false;
    private static boolean debug3 = false;
    private static boolean debug4 = false;

    public static boolean isDebug1() {
        return debug1;
    }
    public static void setDebug1(boolean val) {
        debug1 = val;
    }
    public static boolean isDebug2() {
        return debug2;
    }
    public static void setDebug2(boolean val) {
        debug2 = val;
    }
    public static boolean isDebug3() {
        return debug3;
    }
    public static void setDebug3(boolean val) {
        debug3 = val;
    }
    public static boolean isDebug4() {
        return debug4;
    }
    public static void setDebug4(boolean val) {
        debug4 = val;
    }
}

这是我尝试编译的第一个引用Option中静态方法的类

//contains all the User Interface elements
package UserViewer;

import javafx.scene.layout.BorderPane;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.event.ActionEvent;

class UIPane extends BorderPane implements EventHandler<ActionEvent> {

    UIPane() {
        if(Option.isDebug1() == true) { System.out.println("UIPane succesfully loaded."); }
    }

    @Override
    public void handle(ActionEvent e) {
        if(Option.isDebug2() == true) { System.out.println("Action Event detected in UIPane."); }
    }
}

这里是compile.bat

javac -d . CONST.java
javac -d . Option.java
javac -d . UIPane.java
javac -d . App.java
javac -d . UserViewer.java
java UserViewer.UserViewer DEBUG1
pause

由于它们都在同一个程序包中-UserViewer-我想我可以从程序中的任何位置引用这些静态方法。

这是(第一个)编译器错误:

C:\...\UserViewer>javac -d . UIPane.java
UIPane.java:12: error: cannot find symbol
    if(Option.isDebug1() == true) { System.out.println("UIPane succesfully loaded."); }
 symbol:   variable Option
 location: class UIPane
UIPane.java:17: error: cannot find symbol
    if(Option.isDebug2() == true) { System.out.println("Action Event detected in UIPane."); }
 symbol: variable Option
 location: class UIPane

我对CONST.java以及依赖于CONST和Option的所有其他对象都存在相同的问题,但是由于它们似乎都是同一个问题,因此我省略了其他错误-我的其余代码看不到Option.class或CONST.class,尽管它们在同一包中。 Option.class和CONST.class会进行编译,并且位于正确的包子目录UserViewer中。

感谢您的任何帮助。

java scope compilation static
1个回答
0
投票

正如评论中指出的,您必须一次性编译所有类。

这些是执行此操作的步骤:

  1. 使用控制台中的cd导航到主类的目录。
  2. 键入javac NameOfYourMainClass.java并按Enter。

示例:

想象这是您的文件系统:

  • 桌面
    • myProject
      • 主要
        • MainClass.java main(String[] args)的类
      • 调试
        • Option.java

现在假设myProject文件夹是项目的根目录,您将使用控制台将工作目录更改为main,然后写入javac MainClass.java

如果以后要运行程序,请键入java NameOfYourMainClass

© www.soinside.com 2019 - 2024. All rights reserved.