我看了几篇关于上述错误的帖子。但是我不明白我的代码的哪一部分是不正确的。
该错误适用于以下行: tempPic.setLocation(0,slotIDArray [0]);
slotIDArray是一个非静态变量。 newBloodhound,tempPic也是非静态变量。我很困惑为什么会出现与此事有关的错误。
上下文: 我的代码产生一个GUI,其中左侧有一个分为42个“单元”的面板,每个单元都支持DTPicture类型(所有这些DTPicture单元都被初始化为null。我使用slotIDArray来保持位置的整体引用即,pos 1对应于Y = 38等。仅仅为了后续开发的测试目的,我为Bloodhound组件分配了一个随机DTPicture。由于DTPicture是一个组件,我可以在框架/面板上设置它的位置。所以我打电话testPic.setLocation(0,slotIDArray [0]);查看该图片是否会被转移到位于该特定Y位置的DTPicture“单元格”。
感谢您的帮助。
以下是我的代码的相关部分:
public class RackBuilderTool extends JPanel{
public int[] slotIDArray = new int[42];
public RackBuilderTool() {
super(new GridLayout(42, 1));
//DTPicture[] rackSlotArray = new DTPicture[42];
for (int i = 0; i < 42; i++) {
//add(new ComponentLabel());
DTPicture temp = new DTPicture(null);
//address of DTPicture Component
slotIDArray[i] = add(temp).getY();
/*
add(new ComponentLabel("Bloodhound", "alexi.jpg",
"Bloodhound label
*/
}
}
private static void createAndShowGUI() {
JFrame frame = new JFrame("Rack Builder Tool");
frame.setPreferredSize(new Dimension(400, 600));
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
final RackBuilderTool rackBuilder = new RackBuilderTool();
rackBuilder.setOpaque(true);
frame.add(rackBuilder);
frame.pack();
JButton bloodhoundButton = new JButton("Bloodhound");
JButton computeButton = new JButton("Compute");
JButton powershelfButton = new JButton("Powershelf");
JButton serverButton = new JButton("Server");
JButton storageButton = new JButton("Storage");
JButton switchButton = new JButton("Switch");
bloodhoundButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Clicked Bloodhound Button");
//System.out.println(rackBuilder.slotRowArray[2].getLocation());
//need to fix this. Static variable cannot be used.
Bloodhound newBloodhound = new Bloodhound();
DTPicture tempPic = newBloodhound.getPicture();
tempPic.setLocation(0, slotIDArray[0]);
}
});
JToolBar rackToolBar = new JToolBar("Components", JToolBar.VERTICAL);
rackToolBar.add(bloodhoundButton);
rackToolBar.add(computeButton);
rackToolBar.add(powershelfButton);
rackToolBar.add(serverButton);
rackToolBar.add(storageButton);
rackToolBar.add(switchButton);
frame.add(rackToolBar, BorderLayout.EAST);
frame.pack();
frame.setVisible(true);
}
public static void main(String[] args) {
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run() {
createAndShowGUI();
}
});
}
}
class Bloodhound extends RackComponent {
static private int quantity = 0;
private DTPicture compPic = new DTPicture(
DTPicture.createImageIcon("images/alexi.jpg", "alexi").
getImage());
public Bloodhound() {
++quantity;
}
public DTPicture getPicture() {
return compPic;
}
public String getPartNumber() {
return partNumber;
}
public int getQuantity () {
return quantity;
}
public void setPartNumber(String...partNumbers) {
this.partNumber = partNumbers[0];
}
}
答案 0 :(得分:1)
slotIDArray
是类的非静态变量,您尝试在静态方法中访问它。因此,您遇到了这样的错误。
只需使slotIDArray
静态或从方法定义中移除静态(如果您可以在没有任何问题的情况下执行此操作)来访问它!
答案 1 :(得分:0)
非静态变量 - 当您尝试访问非静态时会发生这种情况 或对象的成员变量。这应该是显而易见的。
private static void createAndShowGUI()
是一个静态方法,您尝试使用的方法访问静态变量位置
tempPic.setLocation(0, slotIDArray[0]);
答案 2 :(得分:0)
newBloodhound
和tempPic
是静态方法中定义的局部变量。因此,从该方法访问它们没有问题。
slotIDArray
是您班级的非静态成员,您无法在静态方法中访问它。