intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

giáo trình Java By Example phần 8

Chia sẻ: Thái Duy Ái Ngọc | Ngày: | Loại File: PDF | Số trang:46

94
lượt xem
27
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Tham khảo tài liệu 'giáo trình java by example phần 8', công nghệ thông tin, kỹ thuật lập trình phục vụ nhu cầu học tập, nghiên cứu và làm việc hiệu quả

Chủ đề:
Lưu

Nội dung Text: giáo trình Java By Example phần 8

  1. Review Questions 1. How do you use a try program block? 2. How do you use a catch program block? 3. Do you have to catch all types of exceptions that might be thrown by Java? 4. When a method you call is defined as potentially throwing an exception, do you have to handle that exception in your program? 5. How many exceptions can you associate with a single try block? 6. How do you pass an exception up from a called method to the calling method? 7. What are the two main types of exceptions that Java may throw? Review Exercises 1. Write an applet that creates a button object. Set up exception-handling code for the OutOfMemoryException exception that could possibly occur when Java tries to allocate resources for the button. 2. Write an applet that catches all Exception objects and displays the string returned by the Exception object's getMessage() method. (Not all Exception objects return message strings. Test your program by generating a divide-by-zero error, which will cause Java to throw an ArithmeticException exception. This exception does generate a message string.) You can find the solution to this exercise in the CHAP30 folder of this book's CD-ROM. The applet is called ExceptionApplet4. Figure 30.8 shows what the applet looks like while running under Appletviewer. Figure 30.8 : ExceptionApplet4 displays the message string returned by an Exception object's getMessage() method. 3. Write an applet that enables the user to enter values into an array. Use two TextField objects, the first being where the user shouldenter the index at which to place the value, and the second being the value to add to the array. Set up the applet so that it responds to ArrayIndexOutOfBoundsException and NumberFormatException exceptions. You can find the solution to this exercise in the CHAP30 folder of this book's CD-ROM. The applet is called ExceptionApplet5. Figure 30.9 shows what the applet looks like while running under Appletviewer. Figure 30.9 : This is ExceptionApplet5 running under Appletviewer. http://www.ngohaianh.info
  2. Chapter 28 Communications CONTENTS URL Objects q Example: Creating an URL Object r URL Exceptions r The Applet Context q Example: Using an AppletContext to Link to an URL r Example: Using an AppletContext in an Applet r Creating a "Favorite URLs" Applet q Summary q Review Questions q Review Exercises q Not to state the obvious, but because applets are used on the Internet, they have the ability to perform a few types of telecommunications tasks. One of these tasks, connecting to other Web sites, is a snap to implement. Other tasks, such as accessing data in files, are difficult to implement because you constantly stumble over the security restrictions built into applets. Dealing with the intricacies of Internet security is beyond the scope of this book. If you're interested in this topic, you should pick up an advanced Java book. In this chapter, though, you'll get a chance to use Java to communicate over the Internet by connecting to URLs that the user supplies. URL Objects In the previous chapter, you got a quick introduction to URL objects when you obtained the location of graphics and sound files by calling the getDocumentBase() and getCodeBase() methods. You used the URL objects returned by these methods in order to display images and play sounds that were stored on your computer. In that case, the locations of the files were on your own system. What you didn't know then is that you can create an URL object directly by calling its constructor. Using this technique, you can create URL objects that represent other sites on the World Wide Web. Although the URL class's constructor has several forms, the easiest to use requires a string argument holding the URL from which you want to create the object. Using this constructor, you create the URL object like this: http://www.ngohaianh.info
  3. URL url = new URL(str); This constructor's single argument is the complete URL of the location to which you want to connect. This URL string must be properly constructed or the URL constructor will throw an exception (generate an error). You'll soon see what to do about such errors. Example: Creating an URL Object Suppose you want to create an URL object for the URL http://www.sun.com, which is where you can find lots of information about Java. You'd create the URL object like this: URL url = new URL("http://www.sun.com"); If the URL construction goes okay, you can then use the URL object however you need to in your applet. URL Exceptions As I mentioned previously, if the argument for the URL constructor is in error (meaning that it doesn't use valid URL syntax), the URL class throws an exception. Because the URL class is designed to throw an exception when necessary, Java gives you no choice except to handle that exception properly. This prevents the applet from accidentally attempting to use a defective URL object. You'll learn all the details about handling exceptions in Chapter 30, "Exceptions." For now, though, you need to know how to handle the URL exception because your applets will not compile properly until you add the exception-handling code. Basically, when you need to watch out for an exception, you enclose the code that may generate the error in a try program block. If the code in the block generates an exception, you handle that exception in a catch program block. (It's no coincidence that when code "throws" an exception, Java expects the program to "catch" that exception.) When you create an URL object from a string, you must watch out for the MalformedURLException exception, which is one of the many exceptions defined by Java. To do this, use the try and catch program blocks, as shown in Listing 28.1. Listing 28.1 LST28_1.TXT: Handling URL Exceptions. try { URL url = new URL(str); http://www.ngohaianh.info
  4. } catch (MalformedURLException e) { DisplayErrorMessage(); } The Applet Context Once you have the URL object created, you need a way to pass it on to the browser in which the applet is running. It is the browser, after all, that will make the Web connection for you. But, how do you refer to the browser from within your applet? You call the getAppletContext() method, which returns an AppletContext object. This AppletContext object represents the browser in which the applet is running. You call getAppletContext() like this: AppletContext context = getAppletContext(); Once you have the context, you can link to the URL represented by the URL object you already created. You do this by calling the AppletContext object's showDocument() method, like this: context.showDocument(url); If all goes well, the above line will connect you to the requested URL. Example: Using an AppletContext to Link to an URL Suppose that you want to enable the user to enter an URL string in your applet and then use URL and AppletContext objects to link to that URL. Listing 28.2 shows how you might accomplish this feat of Internet prestidigitation: Listing 28.2 LST28_2.TXT: Linking to an URL. String str = GetURLStringFromUser(); http://www.ngohaianh.info
  5. try { URL url = new URL(str); AppletContext context = getAppletContext(); context.showDocument(url); } catch (MalformedURLException e) { DisplayErrorMessage(); } In Listing 28.2, the program first calls a method that retrieves a text string from the user. This text string is the URL to which the user wants to connect. Then, the try program block starts. The first line inside the try block attempts to create an URL object from the string the user entered. Of course, because user's often make mistakes when typing in long strings of characters, the string the user entered may not be a syntactically valid URL. In that case, program execution automatically jumps to the catch program block, where your applet displays an appropriate error message. If the URL object gets created okay, though, the program finishes the code in the try block, getting the AppletContext object and making the link to the URL. In this case, Java completely ignores the catch block. Example: Using an AppletContext in an Applet Ready for a full-fledged example? Listing 28.3 is a complete applet that enables the user to link to an URL. Listing 28.4 is the HTML document that loads the applet. Because this applet actually interacts with a browser and the Internet, you must have made your Internet connection before running the applet. Then, to run the applet, load its HTML document into a Java-compatible browser such as Netscape Navigator 2.0. When you do, you'll see a window similar to that shown in Figure 28.1. In this figure, the user has already entered the URL he wishes to visit. In Figure 28.2, the browser has made the requested connection. Figure 28.3 shows the browser when the user enters an invalid URL string. Figure 28.1 : Here, the user is ready to make a connection. Figure 28.2 : If the URL is OK, the browser connects. Figure 28.3 : If the URL is constructed improperly, the applet displays an error message. http://www.ngohaianh.info
  6. NOTE You can load ConnectApplet's HTML file using Appletviewer, if you like. However, you will be unable to make a connection to the requested URL. You can, however, see what happens when you enter a badly constructed URL string. Listing 28.3 ConnectApplet.java: An Applet That Connects to User-Requested URLs. import java.awt.*; import java.applet.*; import java.net.*; public class ConnectApplet extends Applet { TextField textField; boolean badURL; public void init() { textField = new TextField("", 40); Button button = new Button("Connect"); add(textField); add(button); badURL = false; http://www.ngohaianh.info
  7. } public void paint(Graphics g) { Font font = new Font("TimesRoman", Font.PLAIN, 24); g.setFont(font); int height = font.getSize(); if (badURL) g.drawString("Bad URL!", 60, 130); else { g.drawString("Type the URL to which", 25, 130); g.drawString("you want to connect,", 25, 130+height); g.drawString("and then click the Connect", 25, 130+height*2); g.drawString("button.", 25, 130 + height*3); } } public boolean action(Event evt, Object arg) http://www.ngohaianh.info
  8. { String str = textField.getText(); try { URL url = new URL(str); AppletContext context = getAppletContext(); context.showDocument(url); } catch (MalformedURLException e) { badURL = true; repaint(); } return true; } } Tell Java that the applet uses the classes in the awt package. Tell Java that the applet uses the classes in the applet package. Tell Java that the applet uses the classes in the net package. Derive the ConnectApplet class from Java's Applet class. Declare the class's data fields. Override the init() method. Create the TextField and Button controls. http://www.ngohaianh.info
  9. Add the controls to the applet's layout. Initialize the bad URL flag. Override the paint() method. Create and set the Graphics object's font. Get the font's height. If the applet has a bad URL string... Display an error message. Or, of the URL is OK... Draw the applet's instructions. Override the action() method. Get the URL string the user entered. Start the try block. Attempt to create an URL object from the string. Get the AppletContext object. Make the connection. Start the catch block. Set the bad URL flag to true. Repaint the applet in order to display the error message. Tell Java that the applet handled the event message. Listing 28.4 CONNECTAPPLET.htmL: ConnectApplet's HTML Document. Applet Test Page Applet Test Page http://www.ngohaianh.info
  10. Creating a "Favorite URLs" Applet Nothing, of course, says that the string from which you create an URL object must be typed in by the user at runtime. You can hard-code the URLs you want to use right in the applet's source code, which not only ensures that the URLs will always be correct (unless the associated server changes), but also makes it quick and easy to jump to whatever URL you want. Using this idea, you can put together an applet that gives you pushbutton control over your connections, selecting your URLs as easily as you'd select a radio station. The ConnectApplet2 applet, shown in Listing 28.5, is just such an applet. In its current version, it provides four buttons that give you instant connection to the Web sites represented by the buttons. Want to jump to Microsoft's Web page? Give the Microsoft button a click. Want to check out the latest news at Macmillan Computer Publishing? Click the Macmillan button. Of course, just as with the original ConnectApplet, you must have your Internet connection established before you run the applet. And, you must run the applet from a Java-compatible browser. When you run the applet from Netscape Navigator 2.0, you see the window shown in Figure 28.4. As you can see, the applet currently displays four buttons, one each for the Sun, Netscape, Microsoft, and Macmillan Web sites. Just click a button to jump to the associated site. (Figure 28.5 shows the browser after the user has clicked the Macmillan button.) When you're through with that site, use the browser's Back button to return to the ConnectApplet2 applet. Then, choose another site. Figure 28.4 : ConnectApplet2 running under Netscape Navigator 2.0. Figure 28.5 : After clicking the Macmillan button. Sure, you can do the same sort of thing with an HTML document using Web links. But, let's face it, applets are way cooler. Listing 28.5 ConnectApplet2.java: A "Favorite URLs" Applet. import java.awt.*; import java.applet.*; import java.net.*; public class ConnectApplet2 extends Applet { boolean badURL; http://www.ngohaianh.info
  11. public void init() { GridLayout layout = new GridLayout(2, 2, 10, 10); setLayout(layout); Font font = new Font("TimesRoman", Font.PLAIN, 24); setFont(font); Button button = new Button("Sun"); add(button); button = new Button("Netscape"); add(button); button = new Button("Microsoft"); add(button); button = new Button("Macmillan"); add(button); badURL = false; } public void paint(Graphics g) { http://www.ngohaianh.info
  12. if (badURL) g.drawString("Bad URL!", 60, 130); } public boolean action(Event evt, Object arg) { String str; if (arg == "Sun") str = "http://www.sun.com"; else if (arg == "Netscape") str = "http://www.netscape.com"; else if (arg == "Microsoft") str = "http://www.microsoft.com"; else str = "http://www.mcp.com"; try { URL url = new URL(str); AppletContext context = getAppletContext(); context.showDocument(url); } http://www.ngohaianh.info
  13. catch (MalformedURLException e) { badURL = true; repaint(); } return true; } } Tell Java that the applet uses the classes in the awt package. Tell Java that the applet uses the classes in the applet package. Tell Java that the applet uses the classes in the net package. Derive the ConnectApplet2 class from Java's Applet class. Declare the class's data field. Override the init() method. Create and set the applet's layout manager. Create and set the applet's font. Add four button controls to the layout. Initialize the bad URL flag. Override the paint() method. If the applet has a bad URL string... Display an error message. Override the action() method. Declare a local string variable. Get the URL string the user requested. Start the try block. Create an URL object from the string. Get the AppletContext object. Make the connection. Start the catch block. Set the bad URL flag to true. Repaint the applet in order to display the error message. Tell Java that the applet handled the event message. In Listing 28.5, notice how, even though the URLs are hard-coded into the program, the action() http://www.ngohaianh.info
  14. method still surrounds the call to the URL constructor with the try and catch program blocks. This is because Java insists that the applet handle the exception should the URL class throw it. If you remove the exception handling, the applet won't compile. Anyway, having a little extra protection never hurts. Handling the exception is a good way to test whether your hard-coded URLs are valid. I've never known a programmer yet who didn't need to be protected from himself! Summary Although a running applet has to deal with many security considerations, it can usually connect to other Web sites. To do this, the applet creates an URL object representing the site to which the applet should connect. The applet then instructs the browser containing the applet to make the connection, by calling the AppletContext object's showDocument() method. In spite of the telecommunications limitations inherent in applets, you can easily create Internet-aware applets. Review Questions 1. What is the single argument accepted by the version of the URL constructor you studied in this chapter? 2. What is an AppletContext object? 3. How do you obtain a AppletContext object? 4. How can you be sure you have a valid URL object before trying to connect to the URL? 5. What are the two types of program blocks that handle exceptions? 6. How do you connect to the URL represented by an URL object? 7. What type of exception is thrown by the URL class? Review Exercises 1. Write an applet that accepts URLs from the user and displays a message indicating whether the URL is valid or not. 2. Modify the ConnectApplet2 applet so that it features at least eight buttons that'll enable you to jump to your favorite Web sites. The final applet should look something like Figure 28.6 when it's running under Netscape Navigator. (You can find the solution for this exercise in the CHAP28 folder of this book's CD-ROM.) Figure 28.6 : The more Web-site buttons you add, the more places you can visit with a click of the mouse. http://www.ngohaianh.info
  15. http://www.ngohaianh.info
  16. Chapter 27 Images and Sounds CONTENTS Image Types q Loading and Displaying an Image q Example: Using the getDocumentBase() Method r Example: Using the getCodeBase() Method r Loading an Image r Displaying an Image r Example: Displaying an Image in an Applet r Playing a Sound q Example: Using the play() Method r Example: Playing a Sound in an Applet r Controlling Sounds r Example: Using an AudioClip in an Applet r Summary q Review Questions q Review Exercises q If you've seen a lot of the applets that are floating around, you've undoubtedly noticed that many of them feature vivid graphics and even sound effects. When programming in a language such a C++, displaying graphics and playing sounds can be infamously difficult, thanks to the fact that these languages provide no direct support for handling these types of files. Even the Windows API, as immense as it is, provides little help when it comes to handling these graphical and aural chores. Java, on the other hand, was designed to make creating applets as easy as possible. For that reason, Java's classes handle almost all the difficulties associated with displaying images (commonly called bitmaps) and playing sounds. In this chapter, you use Java's power to add images and sounds to your applets. Image Types In the world of computers, there are many types of images, each of which is associated with a specific file format. These image types are usually identified by their file extensions, which include PCX, BMP, http://www.ngohaianh.info
  17. GIF, JPEG (or JPG), TIFF (or TIF), TGA, and more. Each of these file types was created by third-party software companies for use with their products, but many became popular enough to grow into standards. The PCX graphics file type, for example, began as the format for PC Paintbrush files, whereas BMP files are usually associated with the Windows graphical interface. If you were writing your Internet applications using a more conventional language like C++, you could choose to support whatever image type was most convenient for your use. This is because you'd have to write all the file-loading code from scratch, anyway. Java, on the other hand, comes complete with classes that are capable of loading image files for you. This convenience comes with a small price, however, since Java can load only GIF and JPEG image file formats. In this book, you'll use GIF files, which are more common, although JPEG files are rapidly gaining a reputation, especially for high-resolution, true-color images. Loading and Displaying an Image The first step in displaying an image in your applet is to load the image from disk. To do this, you must create an object of Java's Image class. This is fairly easy to do; however, in order to do so, you need to create an URL object that holds the location of the graphics file. You could just type the image's URL directly into your Java source code. If you do this, however, you have to change and recompile the applet whenever you move the graphics file to a different directory on your disk. A better way to create the image's URL object is to call either the getDocumentBase() or getCodeBase() method. The former returns the URL of the directory from which the current HTML file was loaded, whereas the latter returns the URL of the directory from which the applet was run. Example: Using the getDocumentBase() Method As I said previously, the getDocumentBase() method returns the URL of the directory from which the HTML document was loaded. If you're storing your images in the same directory (or a subdirectory of that directory) as your HTML files, you'd want to use this method to obtain an URL for an image. Suppose you have your HTML documents in a directory called PUBLIC and the image you want, called IMAGE.gif, is stored in a subdirectory of PUBLIC called IMAGES. A call to getDocumentBase() will get you the appropriate base URL. That call looks like this: URL url = getDocumentBase(); As you'll soon see, once you have the URL, you can load the file by using the URL along with the relative location of the image, which in this case would be IMAGES/IMAGE.gif. The full URL to the file would then be FILE:/C:/PUBLIC/IMAGES/IMAGE.gif. If you decided to move your public files to a directory called MYHOMEPAGE, the call to getDocumentBase() will give you the URL for that new directory, without your having to change the applet's source code. This new URL, once you included the relative location of the image file, would be FILE:/C:/MYHOMEPAGE/IMAGES/IMAGE.gif. http://www.ngohaianh.info
  18. Example: Using the getCodeBase() Method The getCodeBase() method works similarly to getDocumentBase(), except that it returns the URL of the directory from which the applet was loaded. If you're storing your images in the same directory (or a subdirectory of that directory) as your CLASS files, you'd want to call getCodeBase() to obtain an URL for an image. Suppose you have your CLASS files in a directory called CLASSES and the image you want (still called IMAGE.gif) is stored in a subdirectory of CLASSES called IMAGES. A call to getCodeBase() will get you the base URL you need to load the image. That call looks like this: URL url = getCodeBase(); Again, once you have the URL, you can load the file by using the URL along with the relative location of the image, which would still be IMAGES/IMAGE.gif. The full URL to the file would then be FILE:/C:/CLASSES/IMAGES/IMAGE.gif. Loading an Image Once you have the image's base URL, you're ready to load the image and create the Image object. You can complete both of these tasks at the same time, by calling your applet's getImage() method, like this: Image image = getImage(baseURL, relLocation); The getImage() method's two arguments are the URL returned by your call to getCodeBase() or getDocumentBase() and the relative location of the image. For example, assuming that you've stored your CLASS files in the directory C:\CLASSES and your images in the directory C:\CLASSES\IMAGES, you'd have a code that looks something like this: URL codeBase = getCodeBase(); Image myImage = getImage(codeBase, "images/myimage.gif"); After Java has executed the above lines, your image is loaded into the computer's memory and ready to display. http://www.ngohaianh.info
  19. Displaying an Image Displaying the image is a simple matter of calling the Graphics object's drawImage() method, like this: g.drawImage(myImage, x, y, width, height, this); This method's arguments are the image object to display, the X and Y coordinates at which to display the image, the width and height of the image, and the applet's this reference. TIP When you want to display an image with its normal width and height, you can call a simpler version of the drawImage() method, which leaves out the width and height arguments, like this: drawImage(image, x, y, this). This version of the method actually draws the image faster because it doesn't have to worry about reducing or expanding the image to the given width and height. It just blasts it on to the screen exactly as the image normally appears. You may be wondering where you can get the width and the height of the image. As it turns out (no doubt thanks to careful consideration by Java's programmers over hundreds of cups of coffee), the Image class has two methods, getWidth() and getHeight(), that return the width and height of the image. The complete code for displaying the image, then, might look like this: int width = image.getWidth(this); int height = image.getHeight(this); g.drawImage(image, x, y, width, height, this); As you can see, the getWidth() and getHeight() methods require a single argument, which is the applet's this reference. Example: Displaying an Image in an Applet You're now ready to write an applet that can display images. Listing 27.1 is the Java source code for an applet called ImageApplet that displays a small image using the techniques described previously in this chapter. When you run the applet with Appletviewer, you see the window shown in Figure 27.1. Make sure the SNAKE.gif image is in the same directory as the ImageApplet.class file, since that's where the program expects to find it. Figure 27.1 : This is ImageApplet running under Appletviewer. http://www.ngohaianh.info
  20. Listing 27.1 ImageApplet.java: An Applet That Displays an Image. import java.awt.*; import java.applet.*; import java.net.*; public class ImageApplet extends Applet { Image snake; public void init() { URL codeBase = getCodeBase(); snake = getImage(codeBase, "snake.gif"); resize(250, 250); } public void paint(Graphics g) { int width = snake.getWidth(this); int height = snake.getHeight(this); http://www.ngohaianh.info
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2