我有两个相互作用的类。第一个是中央的,如下:
public class Datenbank {
double winkelPanel = 0;
double groessePanel = 0;
double effizienzPanel = 0;
double maxProduktion = 0;
这里我初始化我的变量并给它们值。在同一个类的后面,有一个函数 addPanel :
public void addPanel(double richtung, double winkel, double groesse,
double effizienz, double maxProd) {
groessePanel += groesse;
if (richtPanel == 0){ richtPanel += richtung/100; }
else { richtPanel += richtung/100; richtPanel /= 2; }
if (winkelPanel == 0){ winkelPanel = winkel; }
else { winkelPanel += winkel; winkelPanel /= 2; }
if(effizienzPanel == 0) { effizienzPanel = effizienz/100; }
else {effizienzPanel += effizienz/100; effizienzPanel /= 2; }
if(maxProduktion == 0) { maxProduktion = maxProd; }
else {maxProduktion += maxProd; maxProduktion /= 2;}
这本身就很好(据我所知)。现在有另一个类,来自与它交互的GUI。
if(menuItem == mPanelHinzufuegen) {
double Flaeche = Double.parseDouble(showInput("Fläche des Panels in m^2:"));
double Richtung = Double.parseDouble(showInput("Richtung des Panels(S = 0, W = 90, 0 = -90):"));
double winkel = Double.parseDouble(showInput("Winkel des Panels in Grad, z.B. 23.5:"));
double effizienz = Double.parseDouble(showInput("Effizienz des Panels, z.B. 23.5:"));
double maxProd = Double.parseDouble(showInput("Max. Produktion des Panels in Watt:"));
Datenbank.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);
}
当我到达调用Datenbank.addPanel时,我收到编译器错误,因为GUI是静态的但是Datenbank不是。简单地将“static”添加到 addPanel 方法不起作用,因为变量(winkelPanel等)开始抛出那些非静态的错误,因此无法像这样使用。
答案 0 :(得分:3)
为什么要让它静止?
Datenbank db = new Datenbank();
db.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);
答案 1 :(得分:1)
根据您的设置,我假设Datenbank
(英文数据库)是单身,因此只应在您的应用程序中实例化一次。
因此,您可以将该类重写为单例:
public enum Datenbank {
INSTANCE;
double winkelPanel = 0;
double groessePanel = 0;
double effizienzPanel = 0;
double maxProduktion = 0;
public void addPanel(double richtung, double winkel, double groesse,
double effizienz, double maxProd) {
...
}
此示例假定您的类Datenbank
具有默认构造函数,否则您必须向INSTANCE
提供适当的参数。
然后您可以在GUI中访问该实例:
Datenbank.INSTANCE.addPanel(Richtung, winkel, Flaeche, effizienz, maxProd);
答案 2 :(得分:0)
将“static”关键字添加到addPanel是不够的。您需要将'Datenbank'类的所有实例变量设为静态
public class Datenbank {
static double winkelPanel = 0;
static double groessePanel = 0;
static double effizienzPanel = 0;
static double maxProduktion = 0;
答案 3 :(得分:0)
Datenbank中的变量在静态上下文中没有意义,除非它们是静态的,这意味着你只有一个用于类。如果您在静态方法中使用它们,它们应该是静态的。 无论是创建Datenbank类型的对象来调用addPanel,还是将类变量声明为static(在此上下文中对我来说没有意义)。 将变量声明为私有:)
答案 4 :(得分:0)
你试图调用不存在的Datenbank的“静态”方法。
您想要将一个面板添加到Datenbank的特定实例,意味着一个由“new”实例化的Datenbank对象。
因此,您的GUI-Class必须有一个提供数据库对象的成员或方法,然后您可以调用addPanel。
这里的主要问题是:静态用于类,非静态部分用于实例。