Метод paint () может быть вызван либо с помощью метода invalidate, либо путем создания объекта класса, который вы используете сейчас.
Я думаю, что в приведенном выше примере кода есть ошибка опечатки. Нельзя иметь класс внутри класса, просто определяя его. Приходя к проблеме, с которой вы столкнулись
Хотя, вызывая метод invalidate, поскольку вы используете его как MyScreen.this.invalidate
, который не является правильным способом его вызова, нельзя вызывать метод рисования из другого класса, так как в вашем случае это AnimationThread
не возможный. Основная особенность класса Screen и метода paint заключается в том, что он вызывается после создания объекта экрана.
И, насколько я понимаю, можно вызвать метод invalidate для менеджера или экрана внутри одного и того же класса, но не путем создания объекта экрана в другом классе и вызова его.
Он должен вызываться просто без использования каких-либо объектов, просто, invalidate();
, перекрашивает экран или делает его недействительным.
Этого также можно добиться, создав объект того же экрана, например, если кто-то хочет отобразить экран по-другому, он может создать объект, используя разные аргументы, и соответственно обработать его в методе рисования.
Здесь каждый раз, когда запускается поток, вы можете создать объект и обработать его по своему выбору.
Как образец:
public class theScreen extends MainScreen{
int dummy;
public theScreen(int firstArg){
// Handle the firstArgument here
dummy=0;
}
public theScreen(int secondArg,int dummy){
// Handle the second Argument here
this.dummy = dummy;
}
public void paint(Graphics graphcis)
{
if(dummy == 0)
{
//Handle what you would like to paint here
}
else{
//Handle with a different paint here
}
}}
Надеюсь, это решит вашу проблему
Удачного кодирования.
Ура