Java: не удается получить доступ к статической переменной из другого класса в том же пакете

#java #eclipse #static

#java #eclipse #статический

Вопрос:

Это довольно странно, потому что у меня есть символьный класс, который может получить доступ к Frame.dimension.getWidth(); и его партнер getHeight() , однако, когда я хотел использовать это в классе Map, eclipse подчеркивает это и не может дать мне отзыв. Запуск программы в любом случае приводит к ошибкам Java, в которых указывается, что они не могут найти значение X объекта Map.

Вот класс Frame:

 package Core;

import java.awt.Dimension;
import java.awt.Rectangle;
import javax.swing.JFrame;


public class Frame
{
static int width = 800, height = 600;
static Dimension dimension;

public static void main(String[]args){
    JFrame frame= new JFrame("RETRO");
    frame.add(new Screen());

    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(width,height);
    frame.setVisible(true);
    frame.setResizable(false);
    dimension = frame.getContentPane().getSize();
}
}
  

И класс Map:

 package Core;

import java.awt.Frame;
import java.awt.Image;
import java.awt.Rectangle;
import javax.swing.ImageIcon;
import java.awt.Dimension;

public class Map
{
    double x, y;

Image map;
ImageIcon background = new ImageIcon("images/Maps/maze.jpg");

public Map(){
    map = background.getImage();
}

public void move(double moveX, double moveY){
        x  = moveX;
        y  = moveY;
}

//////////Gets
public Image getMap(){
    return map;
}
public double getX(){
    if(x<0)
        x=0;
    else if(x>Frame.dimension.getWidth())
        x=Frame.dimension.getWidth();

    return x;
}

public double getY(){
    if(y<0)
        y=0;
    else if(y>Frame.dimension.getHeight())
        y=Frame.dimension.getHeight();

    return y;
}

public int getHeight(){
    return map.getHeight(null);
}

public int getWidth(){
    return map.getWidth(null);
}
}
  

Я мог бы предоставить класс Character, но на данный момент он очень длинный и запутанный.. однако слово Frame использовалось только при вызове Frame.dimension.getWidth()/ getHeight();

Комментарии:

1. кстати, действительно плохая идея назвать один из ваших классов тем же именем, java.lang что и класс, а именно Character

Ответ №1:

Возможно, у вас есть конфликт имен с вашим собственным ядром.Фрейм и собственный java java.awt.Frame.

Я бы переименовал ваш класс Frame на что-то отличное от имени core-Java, и я бы также избегал использования статических переменных.

Ответ №2:

Ваш Map класс ссылается на java.awt.Frame (который вы импортировали), а не Core.Frame .

Если вам действительно нужно сохранить import java.awt.Frame , просто используйте полное имя вашего класса frame при обращении к нему ( Core.Frame ), чтобы избежать столкновения, например, в вашем getX методе:

 public double getX(){
    if(x<0)
        x=0;
    else if(x>Core.Frame.dimension.getWidth())
        x=Core.Frame.dimension.getWidth();

    return x; 
}
  

Или, если вам вообще не нужно использовать java.awt.Frame , просто удалите эту import строку.

Ответ №3:

класс Frame, на который вы ссылаетесь в x=Frame.dimension.getWidth(); is java.awt.Frame . обратите внимание, что вы импортировали этот класс. Попробуйте явно указать: Core.Frame вместо этого или удалите строку import java.awt.Frame; , если вы не используете этот класс.

Комментарии:

1. > < Вау xD… У меня была куча бесполезного импорта. Не думал, что они все испортят. Спасибо!

Ответ №4:

Похоже, что существует конфликт между импортом между java.awt.Frame и Core.Фрейм

Вы должны добавить «импортировать статическое ядро.Frame.dimension» для вашего импорта, а затем просто работайте с «dimension» вместо «Frame.dimension»