Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (767)
Games in Android Showcase (229)
games submitted by our members
Games in WIP (854)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  JOGL threads JUnit and run()  (Read 1633 times)
0 Members and 1 Guest are viewing this topic.
Offline skytomorrownow

Junior Devvie

« Posted 2007-04-17 19:24:24 »

This isn't a JOGL only question, but I'd like to ask here since it's part of a JOGL project and others may have run into this.

I'm currently writing a clock for an animation system that utilizes JOGL. Do to the nature and resolution of my clock, it must be on it's own thread, separate from the rendering thread. So, it extends Thread and sends ClockEvents to ClockListeners in the main thread. All was well in codeland until I started writing my JUnit test for it.

Since Clock extends Thread, I had to override the public void run() function of Thread to get my functionality. In this case, the run() contains code which does various things, chiefly, putting itself to sleep() for a certain interval, after which, it calls private synchronized sendClockEvent(). OK, wrote a little test program. Works like a charm. So, time to write a JUnit TestCase to see how well it works.

JUnit forces you to think about the different ways you might use an Object -- not just what you intended it for. So, since run() is a public method of Thread, what happens when someone calls run()? Well, nothing if someone hasn't called start() first! So why did the designers of Thread make run() public? Why not just leave it protected so the thread can determine what to do? Anyway, I'm stuck with it. So i thought, maybe put start() in the public Clock() method? Well, that won't work because you can't start something that doesn't exist yet -- you eediot! Clock works if someone knows to call start(). But, it seems pretty easy and reasonable for someone to try run(), and Clock will be broken.

How can I hide the run() method of my Clock ( which extends Thread )?
Offline Riven

« JGO Overlord »

Medals: 1356
Projects: 4
Exp: 16 years

Hand over your head.

« Reply #1 - Posted 2007-04-17 19:35:34 »

How can I hide the run() method of my Clock ( which extends Thread )?

You can't.

Thread implements Runnable, so run() MUST be public.

This is a terrible design-flaw though.


It's like... do you use or extend a HashMap... you use it!

Nobody should have any reason to subclass a Thread class, just pass along that Runnable in the constructur.
Same thing for all those poor bastards that extend JFrame for no reason - or worse, they get thaught to extends JFrames


But if you modify your Clock a bit, with a private inner class which implements Runnable, you can pass that to a Thread that your Clock uses, not extends.

That way you hide your run() method, while you keep the functionality.

Hi, appreciate more people! Σ ♥ = ¾
Learn how to award medals... and work your way up the social rankings!
Offline skytomorrownow

Junior Devvie

« Reply #2 - Posted 2007-04-18 05:12:01 »

sweet. thanks riven. i thought the solution would end up with runnable. your suggestion is simple and painless. thx. don't be suprised if i'm back! lol.

Pages: [1]
  ignore  |  Print  

EgonOlsen (1241 views)
2018-06-10 19:43:48

EgonOlsen (1110 views)
2018-06-10 19:43:44

EgonOlsen (850 views)
2018-06-10 19:43:20

DesertCoockie (1260 views)
2018-05-13 18:23:11

nelsongames (1101 views)
2018-04-24 18:15:36

nelsongames (1330 views)
2018-04-24 18:14:32

ivj94 (2070 views)
2018-03-24 14:47:39

ivj94 (1224 views)
2018-03-24 14:46:31

ivj94 (2156 views)
2018-03-24 14:43:53

Solater (788 views)
2018-03-17 05:04:08
Deployment and Packaging
by mudlee
2018-08-22 18:09:50

Java Gaming Resources
by gouessej
2018-08-22 08:19:41

Deployment and Packaging
by gouessej
2018-08-22 08:04:08

Deployment and Packaging
by gouessej
2018-08-22 08:03:45

Deployment and Packaging
by philfrei
2018-08-20 02:33:38

Deployment and Packaging
by philfrei
2018-08-20 02:29:55

Deployment and Packaging
by philfrei
2018-08-19 23:56:20

Deployment and Packaging
by philfrei
2018-08-19 23:54:46 is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!