Java-Gaming.org Hi !
Featured games (90)
games approved by the League of Dukes
Games in Showcase (744)
Games in Android Showcase (225)
games submitted by our members
Games in WIP (825)
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 1534 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
Administrator

« JGO Overlord »


Medals: 1327
Projects: 4
Exp: 16 years


Hand over your head.


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

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

<offtopic>

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

</offtopic>

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.

cheers
Pages: [1]
  ignore  |  Print  
 
 

 
Ecumene (143 views)
2017-09-30 02:57:34

theagentd (207 views)
2017-09-26 18:23:31

cybrmynd (291 views)
2017-08-02 12:28:51

cybrmynd (282 views)
2017-08-02 12:19:43

cybrmynd (292 views)
2017-08-02 12:18:09

Sralse (286 views)
2017-07-25 17:13:48

Archive (953 views)
2017-04-27 17:45:51

buddyBro (1089 views)
2017-04-05 03:38:00

CopyableCougar4 (1655 views)
2017-03-24 15:39:42

theagentd (1421 views)
2017-03-24 15:32:08
Java Gaming Resources
by philfrei
2017-12-05 19:38:37

Java Gaming Resources
by philfrei
2017-12-05 19:37:39

Java Gaming Resources
by philfrei
2017-12-05 19:36:10

Java Gaming Resources
by philfrei
2017-12-05 19:33:10

List of Learning Resources
by elect
2017-03-13 14:05:44

List of Learning Resources
by elect
2017-03-13 14:04:45

SF/X Libraries
by philfrei
2017-03-02 08:45:19

SF/X Libraries
by philfrei
2017-03-02 08:44:05
java-gaming.org 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‑gaming.org
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!