이 질문에 대한 연구를 이미 마쳤으며 스스로 해결하려했지만 운이 없었습니다. 그래서 나는 그것을 묻기로 결정했다.getter를 호출 할 때 NullPointerException이 발생했습니다.
기본 정보 :
는 두 개의 클래스가 있습니다. FBClient
및 State
. FBClient
에는 고정 유형 변수 인 fbc
과 StateManager
인스턴스가 있습니다.이 인스턴스에는 State
항목, 일부 상수 및 2 개의 getter로 작업 할 수있는 몇 가지 메소드가 있습니다. State
에서 BufferedImage
을 초기화하려고합니다.
public class FBClient
{
//Static
public static FBClient fbc;
//In init method
private StateManager stateManager;
//Constants
private final int INIT_FRAME_WIDTH = 320, INIT_FRAME_HEIGHT = (INIT_FRAME_WIDTH/4) * 3, SCALE = 3, FRAME_WIDTH = INIT_FRAME_WIDTH * SCALE, FRAME_HEIGHT = INIT_FRAME_HEIGHT * SCALE;
public static void main(String[] args)
{
try
{
//First call in exception chain:
fbc = new FBClient();
}
catch (Exception e)
{
e.printStackTrace();
System.exit(1);
}
}
private FBClient()
throws IOException
{
//Second call in exception chain:
init();
}
private void init()
throws IOException
{
stateManager = new StateManager();
//Third call in exception chain:
stateManager.addState(new MainMenu((byte) 0, "Main Menu")); //MainMenu is the subclass of State, and the constructor just calls "super(0, "Main Menu")"
}
public int getFRAME_HEIGHT()
{
return FRAME_HEIGHT;
}
public int getFRAME_WIDTH()
{
return FRAME_WIDTH;
}
}
public abstract class State
{
protected final byte ID;
protected final String NAME;
protected final BufferedImage SCREEN;
protected final Graphics2D GRAPHICS;
public State(byte id, String name)
{
this.ID = id;
this.NAME = name;
//Exception cause:
this.SCREEN = new BufferedImage(FBClient.fbc.getFRAME_WIDTH(), FBClient.fbc.getFRAME_HEIGHT(), BufferedImage.TYPE_INT_RGB);
this.GRAPHICS = SCREEN.createGraphics();
}
}
더 많은 정보 : 내가 BufferedImage의 초기화에 리터럴을 넣으면
가 작동합니다.
State
클래스에서 두 개의 변수를 초기화하고 리터럴을 할당하고 해당 변수를 초기화에 넣으면 작동합니다.
변수에 리터럴을 할당하는 대신 FBClient.fbc.getFRAME_WIDTH()
과 FBClient.fbc.getFRAME_HEIGHT()
을 할당하면 NullPointerException
이 발생합니다. 나는 System.out.println(getFRAME_WIDTH + " : " + getFRAME_HEIGHT)
클래스 FBClient
에를 한 경우
는 제대로 출력합니다,하지만 난 State
클래스 (오프 물론 전 FBClient.fbc.
추가)에서 할 경우, 그것은 NullPointerException
가 발생합니다.
내가 FRAME_WIDTH
및 FRAME_HEIGHT
상수 public
을하면, 내가 FBClient.fbc.FRAME_WIDTH
및 FRAME_HEIGHT
을 수행하여 State
클래스에서 액세스하려고, 그것은 NullPointerException
가 발생합니다.
getters 대신 FBClient
클래스의 상수에 직접 액세스하려고하면 올바르게 인쇄됩니다.
마지막
당신의 시간을 주셔서 감사합니다, 당신은 작업에 더 많은 정보가 필요하면, 코멘트에 부탁하고 나는 그것을 제공 할 수 있습니다. 또한, 질문이 잘 구성되지 않았거나 잘 설명되지 않은 경우 사과드립니다. 그렇다면 어떻게 개선 할 수 있는지 말해주십시오. 또한이 질문에 대한 답변을 이미 한 번 들었 으면 사과드립니다.하지만 제가 말했던 것처럼, 나는 내 연구를했습니다.
편집 # 1
주석은 내가이 null인지 확인하는 fbc
값을 출력 제안했다. 그래서이 코드 줄을 State
생성자에 추가했습니다. if(FBClient.fbc != null) System.out.println("Not null"); else System.out.println("Null");
그리고 의심되는 것처럼 null이 출력되었습니다. 왜 그런가요? 나는 명확하게 할당 전에 FBClient.fbc 를 참조하는 main
방법에서 변수 ...
"FBClient.fbc"의 값을 인쇄 할 수 있습니까? 나는 그것의 null을 의심한다. – user1697575
예, 지금 당장 가서 결과를 보여주는 편집을하겠습니다. –