Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > JAVA Micro Edition > Программирование

Программирование Вопросы связанные с программированием в JAVA

Ответ
 
Опции темы
Старый 13.07.2006, 02:55   #1
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
Сообщение TimerTask

Короче или это ошибка или хз

из Класса который загружен как TimerTask и подвешан на таймер (из метода run()) нельзя вызвать метод какогонить другого класса... при попытке вызова все виснет...

в чем ошибка?

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 13.07.2006, 14:05   #2
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
Все вызывается и работает. Просто надо помнить что это другой процесс. Нельзя вызывать одни и те же методы одновременно из разных процессов, если это требуется пиши public synchronized void metodName()
И еще задача должна успеть выполниться до следующего ее вызова по таймеру иначе действительно приложение вылетит в трубу.
(Offline)
 
Ответить с цитированием
Старый 13.07.2006, 14:24   #3
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
хммм... не работает...

код: Main.java

import java.io.IOException;
import java.util.*;
import java.util.Random;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;

public class Main extends MIDlet implements CommandListener {
    
    public Main midlet = this;
    public Display MD = null;
    public boolean Started=false;
    public Timer timer = null;
    public GameC GC = null;
    public Graphics MG = null;
    public MainLoop ML = null;

    public Stages Stage = null;
    public LayerC LC = null;
    public Image MainTileSet = null;
    
    int i,j;
    
    public void startApp() {

        GC= new GameC();
        GC.CreateScreen();
        MG = GC.CreateScreen();
        Display.getDisplay(this).setCurrent(GC);

        MG.setColor(200,200,50);
        MG.fillRect(0,0,100,100);

        GC.flushGraphics();
        
        GC.addCommand(new Command("Exit", Command.EXIT, 1));
        GC.setCommandListener(this);


        Stage = new Stages();

        
        try {
            MainTileSet = Image.createImage("/Tileset Map11.png");
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        
        LC = new LayerC(19,19,MainTileSet,16,16);
        
        for(i=0;i<Stage.TestStageX;i++) for(j=0;Stage.TestStageY<19;j++) {
            LC.setCell(i,j,Stage.TestStage [j][i]);
        }

        TimerTask TT = new MainLoop();
        timer = new Timer();
        timer.schedule( TT, 0, 1000 );

    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
    }
    
    public void commandAction(Command command, Displayable displayable) {
       if (command.getCommandType() == Command.EXIT) {
       destroyApp(true);
       notifyDestroyed();
      }
    }

    public void PAll() {
        
    }

    
}
 

class MainLoop extends TimerTask {

    public static GameC GC = null;
    public static Display MD = null;
    public static Graphics MG = null;
    public static LayerC LC = null;

    int i=0,j=0;    

    public static Main midlet = null;

    public void pall() {

    }
    
    public void run() {

//        LC.paint(MG);
        System.out.println(3);
        
        GC.PAll();

    }
    
}
в классе GameC:

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.Display;

import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.game.GameCanvas;
import javax.microedition.lcdui.Graphics;

public class GameC extends GameCanvas {
    
    int i=0,j=0;
    public static GameC GC = null;
    public static Display MD = null;
    public static Graphics MG = null;
    public static LayerC LC = null;

    public GameC() {
        super(true);
    }
    
    public Graphics CreateScreen() {
        return getGraphics();
    }
    
    public synchronized void PAll() {

        //MG = getGraphics();
        //MG.setColor(200,200,50);
        //i++;
        //if (i>10) {i=0;j++;}
        //if (j>10) {i=0;j=0;}
        
        //MG.fillRect(i,j,10,10);

        
        //flushGraphics();

    }
    

    
}
короче виснет даже на вызове ПУСТОГО метода... даже midlet.PAll(); виснет... только если такой создаешь в самом классе таймера, тогда робит, но если потом из него опять ченить вызываешь все виснет

ммдя... как я уже 100 раз говорил Маркс с Энгельсом пролетают по полной по напрягу умственной деятельности... они на яве никогда не кодили, ламо блин ушастые...

__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 13.07.2006, 21:33   #4
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Надо либо делать метод статичным:
public static void PAll() {

        //MG = getGraphics();
        //MG.setColor(200,200,50);
        //i++;
        //if (i>10) {i=0;j++;}
        //if (j>10) {i=0;j=0;}
        
        //MG.fillRect(i,j,10,10);

        
        //flushGraphics();

    }
чтобы метод был общим для всех экземпляров класса, либо надо инициализировать экземпляр класса GC в классе class MainLoop extends TimerTask
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 13.07.2006, 23:35   #5
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
а можно так:

public class Main extends MIDlet implements CommandListener {
public static GameC GC = null;

и
public void run() {
Main.GC.PAll();
(Offline)
 
Ответить с цитированием
Старый 14.07.2006, 00:26   #6
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
респект братва!!! вы просто супер!
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 14.07.2006, 01:15   #7
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
аааагааа

так нечестно теперь в этом классе все переменные надо делать static и даже теперь flushGraphics(); низя вызвать поскольку она не объявлена статичной... косячОк...

теперь при вызове MG.setColor(200,200,50); опять все подвисает... эта ведь байда не статичная.
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 14.07.2006, 01:26   #8
SubZer0
Администратор
 
Аватар для SubZer0
 
Регистрация: 03.09.2005
Сообщений: 2,408
Написано 301 полезных сообщений
(для 996 пользователей)
короче по моему объявить всё статичным это не выход поскольку всё статичным не объявишь... звучит глупо но факт...
__________________
Как минимум я помог многим (с)
(Offline)
 
Ответить с цитированием
Старый 14.07.2006, 10:24   #9
Piligrim
Оптимист
 
Регистрация: 07.01.2006
Сообщений: 961
Написано 105 полезных сообщений
(для 259 пользователей)
А как ты хотел. Чтобы вызвать метод другого класса надо или ссылку на него передавать или в статическую переменную записать чтобы всем было видно. Или делать методы статическими и передавать им экземпляр объекта, если их много одинаковых.
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
проблема с TimerTask SubZer0 Программирование 2 27.10.2006 10:31


Часовой пояс GMT +4, время: 07:50.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com