Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何避免;“包不存在”;Java中的错误_Java_Swing_Import_Preprocessor_Packages - Fatal编程技术网

如何避免;“包不存在”;Java中的错误

如何避免;“包不存在”;Java中的错误,java,swing,import,preprocessor,packages,Java,Swing,Import,Preprocessor,Packages,大家好,我的社区 我目前正在制作一个Java Swing,它为cfd模拟程序执行宏。 问题是,这些宏应该可以在没有swing变量的情况下执行 我目前的解决方案是,注释掉特定的变量,不管它是用于swing还是独立使用,否则我会得到一个“包不存在”错误 这是不好的,因为其他人必须编辑我的代码,这通常会导致desaster(我指的是经验) 例如: double meshsize = 2.5; double prismsize = 0.02; //double meshsize = Wizard.my

大家好,我的社区

我目前正在制作一个Java Swing,它为cfd模拟程序执行宏。 问题是,这些宏应该可以在没有swing变量的情况下执行

我目前的解决方案是,注释掉特定的变量,不管它是用于swing还是独立使用,否则我会得到一个“包不存在”错误

这是不好的,因为其他人必须编辑我的代码,这通常会导致desaster(我指的是经验)

例如:

double meshsize = 2.5;
double prismsize = 0.02;

//double meshsize = Wizard.myMeshsettings.getmeshsize();
//double prismsize = Wizard.myMeshsettings.getprismsize();
我知道java没有预处理器。由于策略问题,导入虚拟对象也不是解决方案

是否可以检查向导类是否可用,然后才使用向导引用编译部件


礼貌一点,这是我在Stackoverflow上问的第一个问题。

简短的回答是:不,没有办法避免java编译器编译整个代码

较长的答案如下

首先,您可以在所有类都可用的情况下编译代码,但要使实现能够工作,即使特定类在运行时不可用。为此使用动态类加载。(查看
Class.forName()
method)

其次,您甚至可以在编译时编写不需要特定类的代码。在动态类加载中另外使用反射

例如,以下代码片段将在不使用类的情况下编译
向导
,并在使用或不使用此类的情况下正常工作:

try {
    Class clazz = Class.forName("Wizard");
    Field myMeshsettingsField = clazz.getDeclaredField("myMeshsettings");
    myMeshsettingsField.setAccessible(true);
    Object myMeshsettings = myMeshsettingsField.get();
    Method getmeshsize = myMeshsettings.getClass().getMethod("getmeshsize");
    double meshsize = (Double)getmeshsize.invoke(null);
} catch (ClassNotFoundException e) {
    System.out.println("wizard is unavailable");
}
最大的问题是“为什么?”
你为什么需要这个?在没有所需依赖项的情况下编译代码听起来像是糟糕的设计。我建议你对你的任务做一个高层次的解释。然后我们可能会向您建议更好的解决方案

这个问题没有更高层次的解释,它是由于维护问题,例如cfd软件的更新、cfd计算机的新要求或新的几何输入。如果一个几何体被更新,用我目前的设计,我们必须复制粘贴两倍的代码,我们计划制作更多的向导。(谈论300个宏)我认为“以我目前的设计”是关键。这个问题有更高层次的解释。你的问题不包含“geometry”一词,但你的评论包含。到目前为止,你的解决方案相当不错,但是Field类没有方法“getMethod”,因此我没有访问它的权限。考虑过直接进入Meshsettings类,但其中的值没有初始化……知道我如何访问myMeshSettings的数据吗?我们不受这些更改的影响,这些是公司cd adapco的更改和客户的需求,唯一的问题是,我们不希望每次更改宏两次;)看看编辑过的代码。对不起,我弄错了。我直接以SO的形式编写了这段代码,而没有编译它。