Community
Participate
Working Groups
Build Identifier: M20110210-1200 Upon loading the attached project, an error message is displayed, however, since we are developing using threads, the code is valid Reference: Core Java Volume 2 (7th Edition) Reproducible: Always
Created attachment 199042 [details] Source code
The attached source compiles fine.
The attachment does not have any source code, somehow, so I cannot check but I am sure to have seen an error pop up for the InterruptedException status. /** @version 1.32 2004-07-27 @author Cay Horstmann */ import java.awt.*; import java.awt.event.*; import java.awt.geom.*; import java.util.*; import javax.swing.*; /** Shows an animated bouncing ball. */ public class BounceThread { public static void main(String[] args) { JFrame frame = new BounceFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); } } /** A runnable that animates a bouncing ball. */ class BallRunnable implements Runnable { /** Constructs the runnable. @aBall the ball to bounce @aPanel the component in which the ball bounces */ public BallRunnable(Ball aBall, Component aComponent) { ball = aBall; component = aComponent; } public void run() { try { for (int i = 1; i <= STEPS; i++) { ball.move(component.getBounds()); component.repaint(); //Thread.sleep(DELAY); } } catch (InterruptedException e) { e.printStackTrace(); } } private Ball ball; private Component component; public static final int STEPS = 1000; public static final int DELAY = 5; } /** A ball that moves and bounces off the edges of a rectangle */ class Ball { /** Moves the ball to the next position, reversing direction if it hits one of the edges */ public void move(Rectangle2D bounds) { x += dx; y += dy; if (x < bounds.getMinX()) { x = bounds.getMinX(); dx = -dx; } if (x + XSIZE >= bounds.getMaxX()) { x = bounds.getMaxX() - XSIZE; dx = -dx; } if (y < bounds.getMinY()) { y = bounds.getMinY(); dy = -dy; } if (y + YSIZE >= bounds.getMaxY()) { y = bounds.getMaxY() - YSIZE; dy = -dy; } } /** Gets the shape of the ball at its current position. */ public Ellipse2D getShape() { return new Ellipse2D.Double(x, y, XSIZE, YSIZE); } private static final int XSIZE = 15; private static final int YSIZE = 15; private double x = 0; private double y = 0; private double dx = 1; private double dy = 1; } /** The panel that draws the balls. */ class BallPanel extends JPanel { /** Add a ball to the panel. @param b the ball to add */ public void add(Ball b) { balls.add(b); } public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2 = (Graphics2D) g; for (Ball b : balls) { g2.fill(b.getShape()); } } private ArrayList<Ball> balls = new ArrayList<Ball>(); } /** The frame with panel and buttons. */ class BounceFrame extends JFrame { /** Constructs the frame with the panel for showing the bouncing ball and Start and Close buttons */ public BounceFrame() { setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setTitle("BounceThread"); panel = new BallPanel(); add(panel, BorderLayout.CENTER); JPanel buttonPanel = new JPanel(); addButton(buttonPanel, "Start", new ActionListener() { public void actionPerformed(ActionEvent event) { addBall(); } }); addButton(buttonPanel, "Close", new ActionListener() { public void actionPerformed(ActionEvent event) { System.exit(0); } }); add(buttonPanel, BorderLayout.SOUTH); } /** Adds a button to a container. @param c the container @param title the button title @param listener the action listener for the button */ public void addButton(Container c, String title, ActionListener listener) { JButton button = new JButton(title); c.add(button); button.addActionListener(listener); } /** Adds a bouncing ball to the canvas and starts a thread to make it bounce */ public void addBall() { Ball b = new Ball(); panel.add(b); Runnable r = new BallRunnable(b, panel); Thread t = new Thread(r); t.start(); } private BallPanel panel; public static final int DEFAULT_WIDTH = 450; public static final int DEFAULT_HEIGHT = 350; public static final int STEPS = 1000; public static final int DELAY = 3; }
The error which is reported for the source from comment 3 is expected.
(In reply to comment #4) > The error which is reported for the source from comment 3 is expected. Well, the first time I created the Java project, it read that the InterruptedException was inapppropriate, and, suggested refactoring code which is not exactly what the "book" requires. Now, upon pasting the code, the IDE intuitively reads: Unreachable catch block for InterruptedException..., which I am ignoring for the time being.
> Now, upon pasting the code, the IDE intuitively reads: Unreachable catch block > for InterruptedException..., which I am ignoring for the time being. Ignoring it is not an option. You will not be able to run your code with this error.
(In reply to comment #6) > > Now, upon pasting the code, the IDE intuitively reads: Unreachable catch block > > for InterruptedException..., which I am ignoring for the time being. > > Ignoring it is not an option. You will not be able to run your code with this > error. Sorry about that, I think you would need to look into the intermittent pattern of exceptions that might be valid, which of these make the code acceptable for compiling, and, which are not. According to the Horstmann and Cornell this is valid code. I scooped this code up from Core Java Volume 2 (7th Ed) ISBN 0-13-111826-9, Chapter 1. There is an 8th Edition (http://www.amazon.co.uk/Core-Java-II--Advanced-Features-ebook/dp/B0013A1J6U/ref=sr_1_2?ie=UTF8&qid=1309791098&sr=8-2) as well afaik.
However, having said all this, Core Java Volume 2 (7th Edition) was written for Java JDK 1.5, whilst the latest version is JDK 1.6, expected 1.7, as you might know. I am only a student.
(In reply to comment #8) > However, having said all this, Core Java Volume 2 (7th Edition) was written for > Java JDK 1.5, whilst the latest version is JDK 1.6, expected 1.7, as you might > know. I am only a student. It doesn't matter whether it's 1.4, 1.5 or whatever: the InterruptedException is a checked exception and hence the code is invalid and will not run. It's not Horstmann and Cornell who define what's valid Java code but the JLS.
(In reply to comment #9) > (In reply to comment #8) > > However, having said all this, Core Java Volume 2 (7th Edition) was written for > > Java JDK 1.5, whilst the latest version is JDK 1.6, expected 1.7, as you might > > know. I am only a student. > > It doesn't matter whether it's 1.4, 1.5 or whatever: the InterruptedException > is a checked exception and hence the code is invalid and will not run. It's not > Horstmann and Cornell who define what's valid Java code but the JLS. Noted
(In reply to comment #10) > (In reply to comment #9) > > (In reply to comment #8) > > > However, having said all this, Core Java Volume 2 (7th Edition) was written for > > > Java JDK 1.5, whilst the latest version is JDK 1.6, expected 1.7, as you might > > > know. I am only a student. > > > > It doesn't matter whether it's 1.4, 1.5 or whatever: the InterruptedException > > is a checked exception and hence the code is invalid and will not run. It's not > > Horstmann and Cornell who define what's valid Java code but the JLS. > > Noted Any idea which part of the JLS(http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html), so I ask Horstmann about it?
> Any idea which part of the > JLS(http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html), so I ask > Horstmann about it? I guess you can figure this out yourself ;-)
(In reply to comment #12) > > Any idea which part of the > > JLS(http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html), so I ask > > Horstmann about it? > I guess you can figure this out yourself ;-) 11.2.3 discusses Exception checking (http://java.sun.com/docs/books/jls/third_edition/html/exceptions.html#11.2.3)
(In reply to comment #12) > > Any idea which part of the > > JLS(http://java.sun.com/docs/books/jls/third_edition/html/j3TOC.html), so I ask > > Horstmann about it? > I guess you can figure this out yourself ;-) Well, I have had another look at the source code, and, the "suggestion" by Eclipse IDE seem quite unsafe: 1. Remove catch clause - code compiles but the component does not paint the graphics as expected: public void run() { for (int i = 1; i <= STEPS; i++) { ball.move(component.getBounds()); component.repaint(); //Thread.sleep(DELAY); } } 2. Replace catch clause with throws - code does not compile The code does not compile in both cases, and, the developer is left with an unresolved code snippet to run, for this particular code. public void run() { try { for (int i = 1; i <= STEPS; i++) { ball.move(component.getBounds()); component.repaint(); //Thread.sleep(DELAY); } } catch (InterruptedException e) { e.printStackTrace(); } } I'm not expecting Eclipse to resolve all my problems of course, just pointing out my observations.
The message is not misleading and hence this bug is INVALID. If you think that a certain quick fix is not working, then please file one bug report for each quick fix that you think does not work.
(In reply to comment #15) > The message is not misleading and hence this bug is INVALID. If you think that > a certain quick fix is not working, then please file one bug report for each > quick fix that you think does not work. No problem, I think I have exhausted my feedback.