2015-08-17 6 views
-3

Кажется, что все еще хорошо, я не могу создать новый объект в другом классе. Я получил только "java.lang.Null.Pointer.Exception" На самом деле у меня есть класс F16, который используется для создания самолета F16. когда я пытаюсь создать новый объект в MainActivity, чтобы показать самолет, эта ошибка показана.Исключение Java null указателя при создании объекта

MainActivity Класс

public class MainActivity extends Activity {  
    LinearLayout Map=null; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Map=(LinearLayout)findViewById(R.id.Map); 
     try{ 
     F16 myF16=new F16();   
     myF16.CreateAirCraft(myF16.CoordinateX,myF16.CoordinateY, this, Map); 
     } 
     catch(Exception ex){ 
     Log.d("Er", ex.toString());  
     } 
    } 

F16 Класс

public class F16 extends AirCraft { 
Context context; 
private int Image=context.getResources().getIdentifier("F16" , "drawable", context.getPackageName()); 
LinearLayout PlaneBody=null;//a container used to hold All information of Aircraft 
TextView PlaneName=null;// mentions to AirCraft name 
ImageView PlaneImg=null;//mentions to AirCraft Image 
public void CreateAirCraft(byte X , byte Y,Context Ctx,LinearLayout Map){ 
     Name="F-16";  
     PlaneBody=new LinearLayout(Ctx); 
     PlaneName=new TextView(Ctx); 
     PlaneImg=new ImageView(Ctx); 
     PlaneName.setText(Name); 
     PlaneImg.setImageResource(Image); 
     PlaneBody.addView(PlaneName); 
     PlaneBody.addView(PlaneImg); 
     Map.addView(PlaneBody); 
    } 
} 

AirCraft Класс

public abstract class AirCraft { 
    public String Name=""; 
    public byte CoordinateX=0; 
    public byte CoordinateY=0; 
    public byte Weight=0; 
} 
+2

Опубликуйте свои журналы. – Pankaj

+0

@Clairvoyant, я получил только «java.lang.Null.Pointer.Exception». Ничего больше! –

+2

Перед публикацией журналов включите stacktrace с помощью 'Log.d (« Er », ex.toString(), e);' в блоке catch. – Codebender

ответ

2

Марка конструктор в классе F16 с контекстом в качестве аргумента , например

public F16(Context context) 
{ 
Image=context.getResources().getIdentifier("F16" , "drawable", context.getPackageName()); 
} 

и от основной деятельности контекста прохода

F16 myF16=new F16(this); 
+0

кажется, что это работает, потому что он показывает имя воздушного судна, но он не показывает изображение. что вы думаете ? –

+0

Вам не хватает 'this.context = context;'. И теперь, когда он инициализируется в конструкторе, метод «CreateAirCraft», вероятно, не требует больше «контекста» в качестве параметра, если только это не может быть другим контекстом. – Andreas

+0

где вы сохранили изображение? –

0

NullPointerException вызывается линией 3 F16 класса.

Context context; 
private int Image=context.getResources().getIdentifier("F16" , "drawable", context.getPackageName()); 

поле context неявно инициализируется null. Затем инициализируется Image и вызывает context.getResources(), но так как context имеет значение null, вы получаете NPE.

+0

BTW: Это ответ на ** почему ** вы получаете ошибку. «Android Weblineindia» ответил **, как это исправить **. – Andreas

+0

он получает ошибку в F16 myF16 = новый F16(); @Andreas –

+0

@PiyushMittal Он есть, но 'new F16()' call выполняет инициализаторы полей, и это инициализатор, вызывающий NPE. – Andreas

1

Попробуйте ввести код.

public class F16 extends AirCraft { 

Context context; 
private int Image; 
LinearLayout PlaneBody=null;//a container used to hold All information of Aircraft 
TextView PlaneName=null;// mentions to AirCraft name 
ImageView PlaneImg=null;//mentions to AirCraft Image 

public F16(Context context) 
{ 
    this.context = context; 
    Image=context.getResources().getIdentifier("F16" , "drawable", context.getPackageName()); 
} 

public void CreateAirCraft(byte X , byte Y,Context Ctx,LinearLayout Map){ 
     Name="F-16";  
     PlaneBody=new LinearLayout(Ctx); 
     PlaneName=new TextView(Ctx); 
     PlaneImg=new ImageView(Ctx); 
     PlaneName.setText(Name); 
     PlaneImg.setImageResource(Image); 
     PlaneBody.addView(PlaneName); 
     PlaneBody.addView(PlaneImg); 
     Map.addView(PlaneBody); 
    } 
} 
Смежные вопросы