Results 1 to 3 of 3
  1. #1
    Lil_Aziz1's Avatar
    Lil_Aziz1 is offline Senior Member
    Join Date
    Dec 2009
    Location
    United States
    Posts
    343
    Rep Power
    5

    Default Problems with Java 2D example in the book: JAVA 2D Graphics by O'Reilly

    ShowOff:
    Java Code:
    import java.awt.*;
    import java.awt.event.*;
    import java.awt.font.*;
    import java.awt.geom.*;
    import java.awt.image.BufferedImage;
    import java.io.*;
    import java.util.Random;
    
    import com.sun.image.codec.jpeg.*;
    
    public class ShowOff
        extends Component {
      public static void main(String[] args) {
        try {
          // The image is loaded either from this
          //   default filename or the first command-
          //   line argument.
          // The second command-line argument specifies
          //   what string will be displayed. The third
          //   specifies at what point in the string the
          //   background color will change.
          String filename = "Raphael.jpg";
          String message = "Java2D";
          int split = 4;
          if (args.length > 0) filename = args[0];
          if (args.length > 1) message = args[1];
          if (args.length > 2) split = Integer.parseInt(args[2]);
          ApplicationFrame f = new ApplicationFrame("ShowOff v1.0");
          f.setLayout(new BorderLayout());
          ShowOff showOff = new ShowOff(filename, message, split);
          f.add(showOff, BorderLayout.CENTER);
          f.setSize(f.getPreferredSize());
          f.center();
          f.setResizable(false);
          f.setVisible(true);
        }
        catch (Exception e) {
          System.out.println(e);
          System.exit(0);
        }
      }
      
      private BufferedImage mImage;
      private Font mFont;
      private String mMessage;
      private int mSplit;
      private TextLayout mLayout;
      
      public ShowOff(String filename, String message, int split)
          throws IOException, ImageFormatException {
        // Get the specified image.
        InputStream in = getClass().getResourceAsStream(filename);
        JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
        mImage = decoder.decodeAsBufferedImage();
        in.close();
        // Create a font.
        mFont = new Font("Serif", Font.PLAIN, 116);
        // Save the message and split.
        mMessage = message;
        mSplit = split;
        // Set our size to match the image's size.
        setSize((int)mImage.getWidth(), (int)mImage.getHeight());
      }
    
      public void paint(Graphics g) {
        Graphics2D g2 = (Graphics2D)g;
        
        // Turn on antialiasing.
        g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
            RenderingHints.VALUE_ANTIALIAS_ON);
    
        drawBackground(g2);
        drawImageMosaic(g2);
        drawText(g2);
      }
      
      protected void drawBackground(Graphics2D g2) {
        // Draw circles of different colors.
        int side = 45;
        int width = getSize().width;
        int height = getSize().height;
        Color[] colors = { Color.yellow, Color.cyan, Color.orange,
            Color.pink, Color.magenta, Color.lightGray };
        for (int y = 0; y < height; y += side) {
          for (int x = 0; x < width; x += side) {
            Ellipse2D ellipse = new Ellipse2D.Float(x, y, side, side);
            int index = (x + y) / side % colors.length;
            g2.setPaint(colors[index]);
            g2.fill(ellipse);
          }
        }
      }
    
      protected void drawImageMosaic(Graphics2D g2) {
        // Break the image up into tiles. Draw each
        //   tile with its own transparency, allowing
        //   the background to show through to varying
        //   degrees.
        int side = 36;
        int width = mImage.getWidth();
        int height = mImage.getHeight();
        for (int y = 0; y < height; y += side) {
          for (int x = 0; x < width; x += side) {
            // Calculate an appropriate transparency value.
            float xBias = (float)x / (float)width;
            float yBias = (float)y / (float)height;
            float alpha = 1.0f - Math.abs(xBias - yBias);
            g2.setComposite(AlphaComposite.getInstance(
                AlphaComposite.SRC_OVER, alpha));
            // Draw the subimage.
            int w = Math.min(side, width - x);
            int h = Math.min(side, height - y);
            BufferedImage tile = mImage.getSubimage(x, y, w, h);
            g2.drawImage(tile, x, y, null);
          }
        }
        // Reset the composite.
        g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER));
      }
      
      protected void drawText(Graphics2D g2) {
        // Find the bounds of the entire string.
        FontRenderContext frc = g2.getFontRenderContext();
        mLayout = new TextLayout(mMessage, mFont, frc);
        // Find the dimensions of this component.
        int width = getSize().width;
        int height = getSize().height;
        // Place the first full string, horizontally centered,
        //   at the bottom of the component.
        Rectangle2D bounds = mLayout.getBounds();
        double x = (width - bounds.getWidth()) / 2;
        double y = height - bounds.getHeight();
        drawString(g2, x, y, 0);
        // Now draw a second version, anchored to the right side
        //   of the component and rotated by -PI / 2.
        drawString(g2, width - bounds.getHeight(), y, -Math.PI / 2);
      }
      
      protected void drawString(Graphics2D g2,
          double x, double y, double theta) {
        // Transform to the requested location.
        g2.translate(x, y);
        // Rotate by the requested angle.
        g2.rotate(theta);
        // Draw the first part of the string.
        String first = mMessage.substring(0, mSplit);
        float width = drawBoxedString(g2, first, Color.white, Color.red, 0);
        // Draw the second part of the string.
        String second = mMessage.substring(mSplit);
        drawBoxedString(g2, second, Color.blue, Color.white, width);
        // Undo the transformations.
        g2.rotate(-theta);
        g2.translate(-x, -y);
      }
      
      protected float drawBoxedString(Graphics2D g2,
          String s, Color c1, Color c2, double x) {
        // Calculate the width of the string.
        FontRenderContext frc = g2.getFontRenderContext();
        TextLayout subLayout = new TextLayout(s, mFont, frc);
        float advance = subLayout.getAdvance();
        // Fill the background rectangle with a gradient.
        GradientPaint gradient = new GradientPaint((float)x, 0, c1,
            (float)(x + advance), 0, c2);
        g2.setPaint(gradient);
        Rectangle2D bounds = mLayout.getBounds();
        Rectangle2D back = new Rectangle2D.Double(x, 0,
            advance, bounds.getHeight());
        g2.fill(back);
        // Draw the string over the gradient rectangle.
        g2.setPaint(Color.white);
        g2.setFont(mFont);
        g2.drawString(s, (float)x, (float)-bounds.getY());
        return advance;
      }
    }
    ApplicationFrame:
    Java Code:
    import java.awt.*;
    import java.awt.event.*;
    
    public class ApplicationFrame
        extends Frame {
      public ApplicationFrame() { this("ApplicationFrame v1.0"); }
      
      public ApplicationFrame(String title) {
        super(title);
        createUI();
      }
      
      protected void createUI() {
        setSize(500, 400);
        center();
    
        addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent e) {
            dispose();
            System.exit(0);
          }
        });
      }
      
      public void center() {
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Dimension frameSize = getSize();
        int x = (screenSize.width - frameSize.width) / 2;
        int y = (screenSize.height - frameSize.height) / 2;
        setLocation(x, y);
      }
    }
    The problem:
    I'm getting these errors when I try to run:
    Java Code:
    Exception in thread "main" java.lang.Error: Unresolved compilation problems: 
    	Access restriction: The type ImageFormatException is not accessible due to restriction on required library C:\Program Files (x86)\Java\jre6\lib\rt.jar
    	Access restriction: The type JPEGImageDecoder is not accessible due to restriction on required library C:\Program Files (x86)\Java\jre6\lib\rt.jar
    	Access restriction: The type JPEGCodec is not accessible due to restriction on required library C:\Program Files (x86)\Java\jre6\lib\rt.jar
    	Access restriction: The method createJPEGDecoder(InputStream) from the type JPEGCodec is not accessible due to restriction on required library C:\Program Files (x86)\Java\jre6\lib\rt.jar
    	Access restriction: The method decodeAsBufferedImage() from the type JPEGImageDecoder is not accessible due to restriction on required library C:\Program Files (x86)\Java\jre6\lib\rt.jar
    
    	at ShowOff.<init>(ShowOff.java:50)
    	at ShowOff.main(ShowOff.java:30)
    -
    I'm using Windows 7 Home Premium Upgrade 64-bit
    All the examples from Java 2D Graphics by O'Reilly can be found at: ftp://ftp.oreilly.com/pub/examples/java/2d/examples/

    EDIT: I am using Eclipse. I ran it as an administrator as well but it gave me the same error.

    any help is appreciated
    Last edited by Lil_Aziz1; 01-10-2010 at 08:04 PM.

  2. #2
    Lil_Aziz1's Avatar
    Lil_Aziz1 is offline Senior Member
    Join Date
    Dec 2009
    Location
    United States
    Posts
    343
    Rep Power
    5

    Default

    EDIT: I am using Eclipse. I ran it as an administrator as well but it gave me the same error.

  3. #3
    Java8 is offline Member
    Join Date
    Jan 2010
    Posts
    2
    Rep Power
    0

    Default

    I tried this program in mac terminal and I also have an error, not the exact type as yours though:

    java.lang.IllegalArgumentException: InputStream is null.

Similar Threads

  1. Java Graphics
    By svaidya in forum New To Java
    Replies: 8
    Last Post: 12-07-2009, 06:11 PM
  2. java address book problems
    By Ekul in forum AWT / Swing
    Replies: 3
    Last Post: 11-11-2009, 08:14 PM
  3. Want to learn Java Graphics
    By loggen in forum New To Java
    Replies: 7
    Last Post: 01-03-2009, 05:15 PM
  4. Tell me about the best book for Java.
    By CS Geek in forum New To Java
    Replies: 12
    Last Post: 08-31-2008, 06:18 AM
  5. Problems with Graphics and a Timer...
    By r0binho0d in forum Java Applets
    Replies: 5
    Last Post: 07-26-2008, 04:03 AM

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •