Solved

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

Posted on 2004-03-27
11
541 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 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
Get 15 Days FREE Full-Featured Trial

Benefit from a mission critical IT monitoring with Monitis Premium or get it FREE for your entry level monitoring needs.
-Over 200,000 users
-More than 300,000 websites monitored
-Used in 197 countries
-Recommended by 98% of users

 

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
 
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

Salesforce Made Easy to Use

On-screen guidance at the moment of need enables you & your employees to focus on the core, you can now boost your adoption rates swiftly and simply with one easy tool.

Question has a verified solution.

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

Java had always been an easily readable and understandable language.  Some relatively recent changes in the language seem to be changing this pretty fast, and anyone that had not seen any Java code for the last 5 years will possibly have issues unde…
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
Viewers learn about the “for” loop and how it works in Java. By comparing it to the while loop learned before, viewers can make the transition easily. You will learn about the formatting of the for loop as we write a program that prints even numbers…
Viewers will learn how to properly install Eclipse with the necessary JDK, and will take a look at an introductory Java program. Download Eclipse installation zip file: Extract files from zip file: Download and install JDK 8: Open Eclipse and …

690 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