Having trouble with the special drawing.

Ok, so I am still fairly new to java and am working on this game to improve myself. When my special is set to true it does not draw for some reason can someone tell me what I am doing wrong?

Below are the files containing code having to deal with the special.

Special.java
[spoiler]

package com.chimpygames;

import java.awt.Color;
import java.awt.Graphics2D;

public class Special {

	// fields
	private double x;
	private double y;
	private int r;
	private int increase;

	private Color color1;

	
	//constructor
	public Special(int x, int y) {
		//new code
		this.x = x;
		this.y = y;
		r = 0;
		increase = 1;

		color1 = Color.WHITE;
	}

	// functions
	
	public double getx() { return x; }
	public double gety() { return y; }
	public double getr() { return r; }

	public boolean update() {
		//new true code
			while (r <= 10) {
			r += increase;
			r++;
			return false;
		}
		
		return false;
	}

	public void draw(Graphics2D g) {
		g.setColor(color1);
		g.drawOval((int) x,(int) y, 5 * r, 5 * r);
	}
}

[/spoiler]

GamePanel.java
[spoiler]

package com.chimpygames;

import javax.swing.JPanel;

import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.awt.image.*;
import java.util.ArrayList;

import javax.swing.JPanel;

public class GamePanel extends JPanel implements Runnable, KeyListener {

	// Fields
	public static int WIDTH = 400;
	public static int HEIGHT = 500;

	private Thread thread;
	private boolean isRunning;

	private BufferedImage image;
	private Graphics2D g;

	private int FPS = 30;
	private double averageFPS;

	public Player player;
	public static ArrayList<Bullet> bullets;
	public static ArrayList<Enemy> enemies;
	public static ArrayList<Special> special;

	// Constructor
	public GamePanel() {
		super();
		setPreferredSize(new Dimension(WIDTH, HEIGHT));
		setFocusable(true);
		requestFocus();
	}

	// Functions
	public void addNotify() {
		super.addNotify();
		if (thread == null) {
			thread = new Thread(this);
			thread.start();
		}
		addKeyListener(this);
	}

	@Override
	public void run() {
		isRunning = true;

		image = new BufferedImage(WIDTH, HEIGHT, BufferedImage.TYPE_INT_RGB);
		g = (Graphics2D) image.getGraphics();

		player = new Player();
		bullets = new ArrayList<Bullet>();
		enemies = new ArrayList<Enemy>();
		for (int i = 0; i < 2000; i++) {
			enemies.add(new Enemy(1,1));
		}
		
		long startTime;
		long URDTimeMillis;
		long waitTime;
		long totalTime = 0;

		int frameCount = 0;
		int maxFrameCount = 30;

		long targetTime = 1000 / FPS;

		// GAME LOOP
		while (isRunning) {

			startTime = System.nanoTime();

			gameUpdate();
			gameRender();
			gameDraw();

			URDTimeMillis = (System.nanoTime() - startTime) / 1000000;
			waitTime = targetTime - URDTimeMillis;

			try {
				Thread.sleep(waitTime);
			} catch (Exception e) {
			}

			totalTime += System.nanoTime() - startTime;
			frameCount++;
			if (frameCount == maxFrameCount) {
				averageFPS = 1000.0 / ((totalTime / frameCount) / 1000000);
				frameCount = 0;
				totalTime = 0;
			}

		}
	}

	private void gameUpdate() {

		//player update
		player.update();
		
		//bullet update
		for (int i = 0; i < bullets.size(); i++) {
			boolean remove = bullets.get(i).update();
			if (remove) {
				bullets.remove(i);
				i--;
			}
		}
		
		//enemy update
		for (int i = 0; i < enemies.size(); i++) {
			enemies.get(i).update();
		}
		
		//bullet and enemy collisions
		for (int i = 0; i < bullets.size(); i++) {
			
			Bullet b = bullets.get(i);
			double bx = b.getx();
			double by = b.gety();
			double br = b.getr();
			
			for (int j = 0; j < enemies.size(); j++) {
			
				Enemy e = enemies.get(j);
				double ex = e.getx();
				double ey = e.gety();
				double er = e.getr();
				
				double dx = bx - ex;
				double dy = by - ey;
				double dist = Math.sqrt(dx * dx + dy * dy);
				
				if (dist < br + er) {
					e.hit();
					bullets.remove(i);
					i--;
					break;
				}				
			}
		}
		
		
		//special update
		try {
			for (int t = 0; t < special.size(); t++) {
				boolean remove = special.get(t).update();
				if (remove) {
					special.remove(t);
					t--;
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}

		//enemy and player collision
		for (int i = 0; i < enemies.size(); i++) {
			
			Enemy e = enemies.get(i);
			
			double ex = e.getx();
			double ey = e.gety();
			double er = e.getr();

			double px = player.getx();
			double py = player.gety();
			double pr = player.getr();
			
			double dx = ex - px;
			double dy = ey - py;
			double dist = Math.sqrt(dx * dx + dy * dy);
				
			if (player.getSpecial()) {
				if (dist < (er + 10) + (pr + 10)) {
					e.hit();
				}
			}
		}
		
		//check dead enemies
		for(int i=0; i < enemies.size(); i++) {
			if(enemies.get(i).isDead()) {
				enemies.remove(i);
				i--;
			}
		}
	}

	private void gameRender() {
		g.setColor(Color.BLACK);
		g.fillRect(0, 0, WIDTH, HEIGHT);
		g.setColor(Color.WHITE);
		g.drawString("FPS: " + averageFPS, 10, 10);
		g.drawString("Bullets: " + bullets.size(), 10, 20);
		g.drawString("Enemies: " + enemies.size(), 10, 30);
		g.drawString("X: " + player.x + "  Y: " + player.y, 10, 40);
		
		//draw special
		try {
			for(int i =0; i < special.size(); i++){
				special.get(i).draw(g);
			}
		} catch (Exception e) {
			// TODO: handle exception
		}

		
		//draw player
		player.draw(g);
		
		//draw bullets
		for(int i =0; i < bullets.size(); i++){
			bullets.get(i).draw(g);
		}
		
		//draw enemies
		for (int i = 0; i < enemies.size(); i++) {
			enemies.get(i).draw(g);
		}
	}

	private void gameDraw() {
		Graphics g2 = this.getGraphics();
		g2.drawImage(image, 0, 0, null);
		g2.dispose();
	}

	public void keyTyped(KeyEvent key) {
	}

	public void keyPressed(KeyEvent key) {

		int keyCode = key.getKeyCode();

		switch (keyCode) {
		case KeyEvent.VK_LEFT:
			player.setLeft(true);
			break;
		case KeyEvent.VK_RIGHT:
			player.setRight(true);
			break;
		case KeyEvent.VK_UP:
			player.setUp(true);
			break;
		case KeyEvent.VK_DOWN:
			player.setDown(true);
			break;
		case KeyEvent.VK_Z:
			player.setFiring(true);
			break;
		case KeyEvent.VK_X:
			player.setSpecial(true);
			break;

		default:
			break;
		}

	}

	public void keyReleased(KeyEvent key) {
		int keyCode = key.getKeyCode();

		switch (keyCode) {
		case KeyEvent.VK_LEFT:
			player.setLeft(false);
			break;
		case KeyEvent.VK_RIGHT:
			player.setRight(false);
			break;
		case KeyEvent.VK_UP:
			player.setUp(false);
			break;
		case KeyEvent.VK_DOWN:
			player.setDown(false);
			break;
		case KeyEvent.VK_Z:
			player.setFiring(false);
			break;
		case KeyEvent.VK_X:
			player.setSpecial(false);
			break;

		default:
			break;
		}
	}
}

[/spoiler]

Player.java
[spoiler]

package com.chimpygames;

import java.awt.*;

public class Player {

	// fields
	public int x;
	public int y;
	public int r;

	public int dx;
	public int dy;
	private int speed;

	private boolean left;
	private boolean right;
	private boolean up;
	private boolean down;
	
	private boolean firing;
	private long firingTimer;
	private long firingDelay;
	
	private boolean special;
	private long specialTimer;
	private long specialDelay;

	private int lives;
	private Color color1;
	private Color color2;

	// constructor
	public Player() {

		x = GamePanel.WIDTH / 2;
		y = GamePanel.HEIGHT / 2;
		r = 5;

		dx = 0;
		dy = 0;
		speed = 6;

		lives = 3;
		color1 = Color.WHITE;
		color2 = Color.RED;
		
		firing = false;
		firingTimer = System.nanoTime();
		firingDelay = 200;
		
		special = false;
		specialTimer = System.nanoTime();
		specialDelay = 5000;
	}

	// functions
	public int getx() {
		return x;
	}
	
	public int gety() {
		return y;
	}
	
	public int getr() {
		return r;
	}
	
	public boolean getSpecial() {
		return special;
	}

	public void setLeft(boolean b) {
		left = b;
	}

	public void setRight(boolean b) {
		right = b;
	}

	public void setUp(boolean b) {
		up = b;
	}

	public void setDown(boolean b) {
		down = b;
	}
	
	public void setSpecial(boolean b) {
		special = b;
	}
	
	public void setFiring(boolean b) { firing = b;}

	public void update() {

		if (left) {
			dx = -speed;
		}
		if (right) {
			dx = speed;
		}
		if (up) {
			dy = -speed;
		}
		if (down) {
			dy = speed;
		}

		x += dx;
		y += dy;

		if (x < r)
			x = r;
		
		if (y < r)
			y = r;
		
		if (x > GamePanel.WIDTH - r)
			x = GamePanel.WIDTH - r;
		
		if (y > GamePanel.HEIGHT - r)
			y = GamePanel.HEIGHT - r;

		dx = 0;
		dy = 0;
		
		if(firing) {
			long elapsed = (System.nanoTime() - firingTimer) / 1000000;
			if(elapsed > firingDelay) {
				GamePanel.bullets.add(new Bullet(270, x, y));
				firingTimer = System.nanoTime();
			}
		}
		
		if(special) {
			long elapsed = (System.nanoTime() - specialTimer) / 1000000;
			if(elapsed > specialDelay) {
				try {
					GamePanel.special.add(new Special(getx(), gety()));
				} catch (Exception e) {
					// TODO: handle exception
				}
				
				specialTimer = System.nanoTime();
			}
		}
	}

	public void draw(Graphics2D g) {

		g.setColor(color1);
		g.fillOval(x - r, y - r, 2 * r, 2 * r);

		g.setStroke(new BasicStroke(3));
		g.setColor(color1.darker());
		g.drawOval(x - r, y - r, 2 * r, 2 * r);
		g.setStroke(new BasicStroke(1));

	}

}

[/spoiler]