Здравствуйте, имеется следующая конструкция:
class A{
int x;
A(){
foo();
}
void foo(){}
}
class B{
int x;
class C extends A{
C(){
super();
}
@Override
void foo(){
x = B.this.x; //Nullpointer здесь
}
}
C c;
B(){
c = new C();
}
}
Пока что решил это, избавившись от зависимости C и A, просто переписав A в C. Но как-то не хотелось бы дублировать целый класс из-за этого.
Почему возникает ошибка и как исправить это другим способом, не дублируя класс?
P.S. если имеет значение, то это возникает в коде под андроид, но думаю и в обычной java тоже самое.
Ошибка оказалась в многопоточности, в одном потоке вышеприведенная структура работает без ошибок. Вот самый минимум кода, как просили:
MainActivity.java
package com.mycompany.StackDemo;
import android.app.Activity;
import android.os.Bundle;
import android.opengl.GLSurfaceView;
public class MainActivity extends Activity{
private GLSurfaceView glSurfaceView;
Game room;
Player p;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
room = new Game();
glSurfaceView = new GLSurfaceView(this);
glSurfaceView.setRenderer(room);
glSurfaceView.queueEvent(new Runnable() { public void run() {room.start();} });
}
}
QuadObj.java
package com.mycompany.StackDemo;
public class QuadObj
{
float x;
QuadObj(float a){
x = a;
update();
}
void update(){}
}
Player.java
package com.mycompany.StackDemo;
public class Player
{
final Part part[] = new Part[1];
float x;
Player(float a){
x=a;
part[0]=new Part(0);
}
class Part extends QuadObj{
Part(float a){
super(a);
}
@Override
void update(){
x=Player.this.x;
}
}
}
Game.java
package com.mycompany.StackDemo;
import android.opengl.GLSurfaceView;
import javax.microedition.khronos.egl.EGLConfig;
import javax.microedition.khronos.opengles.GL10;
public class Game implements GLSurfaceView.Renderer
{
Player p;
public void start(){
p=new Player(0);
}
public void onDrawFrame(GL10 glUnused){}
public void onSurfaceChanged(GL10 glUnused, int widthc, int heightc){}
public void onSurfaceCreated(GL10 glUnused, EGLConfig config){}
}
Вот сам текст ошибки:
E/AndroidRuntime(23151): FATAL EXCEPTION: GLThread 836
E/AndroidRuntime(23151): java.lang.NullPointerException
E/AndroidRuntime(23151): at com.mycompany.StackDemo.Player$Part.update(Player.java:18)
E/AndroidRuntime(23151): at com.mycompany.StackDemo.QuadObj.(QuadObj.java:9)
E/AndroidRuntime(23151): at com.mycompany.StackDemo.Player$Part.(Player.java:13)
E/AndroidRuntime(23151): at com.mycompany.StackDemo.Player.(Player.java:8)
E/AndroidRuntime(23151): at com.mycompany.StackDemo.Game.start(Game.java:9)
E/AndroidRuntime(23151): at com.mycompany.StackDemo.MainActivity$100000000.run(MainActivity.java:18)
E/AndroidRuntime(23151): at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1463)
E/AndroidRuntime(23151): at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1240)
Помогите, а то ничего не поймуОжидаю, что путь должен быть /document/image/picture
пробовал понять читая статьи,не получилось!Прошу объяснить по простому на примере:есть StackPane с именем Mpane нужно увеличить его размер с допустим...