Solved

how to get the time out of the stopwatch code in J2ME

Posted on 2004-03-27
11
537 Views
Last Modified: 2008-01-09
i there i am new to this and have a piece of code on a stopwatch

[code]

        public void paint(Graphics g)

        {

            if(!reset)

            {

                g.setColor(0xffffff);

                g.fillRect(0, 0, width, height);

                g.setColor(0);

                g.setFont(defaultFont);

                long temp = currentTime - startTime;

                hh = temp / 0x36ee80L;

                mm = (temp - hh * 3600L * 1000L) / 60000L;

                ss = (temp - hh * 3600L * 1000L - mm * 60L * 1000L) / 1000L;

                ii = (temp % 1000L) / 10L;

                if(hh < 10L)

                    hhStr = "0" + hh;

                else

                    hhStr = String.valueOf(hh);

                if(mm < 10L)

                    mmStr = "0" + mm;

                else

                    mmStr = String.valueOf(mm);

                if(ss < 10L)

                    ssStr = "0" + ss;

                else

                    ssStr = String.valueOf(ss);

                if(ii < 10L)

                    iiStr = "0" + ii;

                else

                    iiStr = String.valueOf(ii);

                str = hhStr + ":" + mmStr + ":" + ssStr + ":" + iiStr;

                g.drawString(str, xStr, yStr, 65);

            } else

            {

                reset = false;

                g.setColor(0xffffff);

                g.fillRect(0, 0, width, height);

                g.setColor(0);

                g.setFont(defaultFont);

                g.drawString("00:00:00:00", xStr, yStr, 65);

            }

        }

[/code]

hmm.. right now i've got to use this piece of code and extract out the time when the application has stopped and store it then i have to compare it with previous timings... how do i achieve that?  currently i've added this method

[code]    public void getTime()

    {

        System.out.println("getTime() was invoked");

            long temp = currentTime - startTime;

 

            hh = temp / 0x36ee80L;

 

            mm = (temp - hh * 3600L * 1000L) / 60000L;

 

            ss = (temp - hh * 3600L * 1000L - mm * 60L * 1000L) / 1000L;

 

            ii = (temp % 1000L) / 10L;

             if(hh < 10L)

                hhStr = "0" + hh;

            else

                hhStr = String.valueOf(hh);

            if(mm < 10L)

                mmStr = "0" + mm;

            else

                mmStr = String.valueOf(mm);

            if(ss < 10L)

                ssStr = "0" + ss;

            else

                ssStr = String.valueOf(ss);

            if(ii < 10L)

                iiStr = "0" + ii;

            else

                iiStr = String.valueOf(ii);

//build string to display

            str = hhStr + ":" + mmStr + ":" + ssStr + ":" + iiStr;

        System.out.println(str);

    }

[/code]

 

but i dont think it is correct pls someone enlighten me
0
Comment
Question by:icepricessa
  • 6
  • 3
  • 2
11 Comments
 
LVL 13

Expert Comment

by:Webstorm
ID: 10694861
Hi icepricessa,

System.currentTimeMillis();  // return the current time in ms

0
 

Author Comment

by:icepricessa
ID: 10695046
ok... erm.. how am i supposed to implemet is?
is it like this?


 public void getTime(){

return currentTimeMillis();
    }
0
 
LVL 13

Assisted Solution

by:Webstorm
Webstorm earned 55 total points
ID: 10695058
You can use System.currentTimeMillis() in your getTime() method :

     public void getTime()
     {

        System.out.println("getTime() was invoked");

            long temp = System.currentTimeMillis() - startTime;
...

You should have initialized the startTime variable as:

    startTime = System.currentTimeMillis();


http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()
0
 

Author Comment

by:icepricessa
ID: 10695080
here's the rest of the code

class GameTimer implements Runnable
{
    private Thread thread;
    private int height, width;
    private int yStr, xStr;
    private boolean goOn, reset, pause;
    private long currentTime, startTime, hh, mm, ss, ii;
    private Font defaultFont;
    private String str, hhStr, mmStr, ssStr, iiStr;
      private GameCanvas canvas;
      
    GameTimer(GameCanvas c)
    {
            canvas = c;
        reset = false;
        width = canvas.getWidth();
        height = canvas.getHeight();
        xStr = (width/2)+30;
        yStr = (height/2)-54;
            //sets the default font type, size and style
        defaultFont = Font.getFont(Font.FACE_PROPORTIONAL, Font.STYLE_PLAIN, Font.SIZE_SMALL);
    }      

    public void startThread()
    {
        System.out.println("thread started");
        goOn = true;
        thread = new Thread(this);
        thread.start();
            pause= true;
    }      

    public void run()
    {
        while(goOn)
        {
           if(pause)
                synchronized(this)
                {
                    try
                    {
                        System.out.println("about to invoke the wait() method");
                        wait();
                    }
                    catch(Exception exception) { }
                }
                  try {
                  currentTime = System.currentTimeMillis();
                  canvas.repaint();
                  }catch(Exception exception) { }
        }
    }

    void setTimeMs(long l)
    {
    }

    public long getTimeMs()
    {
        return 0L;
    }

    public void restartThread()
    {
        if(thread != null)
            stopThread();
        startThread();
    }


    public void stopThread()
    {
        System.out.println("thread stopped");
        goOn = false;
        if(thread != null)
            thread = null;
    }

    public void startStopWatch()
    {
        pause = false;
        System.out.println("startStopWatch() was invoked");
        startTime = System.currentTimeMillis();
        synchronized(this)
        {
            notify();
        }
    }

    public void stopStopWatch()
    {
        System.out.println("stopStopWatch() was invoked");
        pause = true;
        canvas.repaint();
    }

    public void resetStopWatch()
    {
        System.out.println("resetStopWatch() was invoked");
        currentTime = 0L;
        startTime = 0L;
        reset = true;
        canvas.repaint();
    }
0
 

Author Comment

by:icepricessa
ID: 10695155
haha yes managed to get it to work :) thanks alot... hmm

well... there a small problem i was wondering if it could be solved...

when the value gets printed out if it is 2.65sec displayed on the stopwatch 2265 would get printed out instead

is therea way to solve this? =)
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 30

Accepted Solution

by:
GrandSchtroumpf earned 60 total points
ID: 10695209
i guess you mean "when the value gets printed out if it is 2.265sec displayed on the stopwatch 2265 would get printed out instead".
you could use a floating point, but sometimes you get strange results with floating point numbers.  i think the best thing to do is to use 2 ints, one for the seconds and one for the fraction:

int milliseconds = ...
int seconds = milliseconds / 1000;
int fraction = milliseconds % 1000;
String formattedSeconds = seconds + ".";
if (fraction < 100) formattedSeconds += "0";
if (fraction < 10) formattedSeconds += "0";
formattedSeconds += fraction;
0
 

Author Comment

by:icepricessa
ID: 10695391
haha ok so i did this

    public void getTime()
     {
        System.out.println("getTime() was invoked");

        long temp = currentTime - startTime;
            
            hh = temp / 0x36ee80L;
            
            mm = (temp - hh * 3600L * 1000L) / 60000L;
            
            ss = (temp - hh * 3600L * 1000L - mm * 60L * 1000L) / 1000L;
            
            ii = (temp % 1000L) / 10L;
                  
            if(hh < 10L)
                hhStr = "0" + hh;
            else
                hhStr = String.valueOf(hh);
            if(mm < 10L)
                mmStr = "0" + mm;
            else
                mmStr = String.valueOf(mm);
            if(ss < 10L)
                ssStr = "0" + ss;
            else
                ssStr = String.valueOf(ss);
            if(ii < 10L)
                iiStr = "0" + ii;
            else
                iiStr = String.valueOf(ii);
                  //build string to display
            str = hhStr + ":" + mmStr + ":" + ssStr + ":" + iiStr;                  
                  
                  System.out.println(str);
    }

and it works thanks you so much =)

just one other question... when i use the get time it'll be displayed as 00:00:04:09
 so when i store this in recordstore or database how would i use this method to compare with a previous timing for example compare 00:00:04:09 and 00:00:01:29 to see which is a longer time

0
 

Author Comment

by:icepricessa
ID: 10695564
i''ve tried to do this in the method

            str = hhStr + "." + mmStr + "." + ssStr + "." + iiStr;                  
                  long s = parseLong(str);

but i get a compilation error :x
0
 
LVL 30

Assisted Solution

by:GrandSchtroumpf
GrandSchtroumpf earned 60 total points
ID: 10695619
you can just use the string comparison (alphabetical comparison):
highscore1 and highscore2 are strings of format "00:00:00:00"
int comparison = highscore1.compareTo(highscore2);
0
 
LVL 30

Expert Comment

by:GrandSchtroumpf
ID: 10698719
:°)
0
 

Author Comment

by:icepricessa
ID: 10699015
=)
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
How to parse custom JSON to POJO java 4 57
Error with Java/Cache JDBC Classpath 2 31
what is a "java.lang.System Property"   ? 20 58
servlet doXXX methods 3 39
INTRODUCTION Working with files is a moderately common task in Java.  For most projects hard coding the file names, using parameters in configuration files, or using command-line arguments is sufficient.   However, when your application has vi…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Viewers learn how to read error messages and identify possible mistakes that could cause hours of frustration. Coding is as much about debugging your code as it is about writing it. Define Error Message: Line Numbers: Type of Error: Break Down…
Viewers will learn about the regular for loop in Java and how to use it. Definition: Break the for loop down into 3 parts: Syntax when using for loops: Example using a for loop:

863 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

23 Experts available now in Live!

Get 1:1 Help Now