Go to Pulse Home Page Pulse provides industry leading solutions, products and services for Data Communications, WAN and Computer Networking Call Pulse now for all your Datacomm, WAN and computer networking needs !

Click to go back one page

What are Java? Presented by: Sun Microsystems, Inc.
Copyright 2000©

 

   

 

A Primer on the Java[tm] Platform and Java Accessibility

by the Sun Accessibility Team

Contents:


Introduction

Java[tm] technologies are rapidly being embraced by industry and academia alike. According to the Sun Developer Relations (SDR) group, over 1000 colleges and universities worldwide now offer courses in the Java programming language. On the corporate front, a recent Zona Research survey found that in the coming year 84% of corporations will be developing new Java-based applications. In 75% of these cases, this development is being done to extend the lives of aplications running in legacy environments. This widespread adoption of the Java Platform is also evident when the number of Java programmers (over 700 thousand) and the number of books that have been written about the Java language (over 1200) are considered. Even more impressive, is the fact that the Java phenomenon is only three and a half years old.

And yet, people with disabilities are only just starting to be exposed to and effected by Java technologies in a significant way. It is this growing exposure that is driving further investigation into what the Java Platform can do and, more importantly, into what type of accessibility support has been built into it.

 

In the Beginning

It all began when a few Sun Microsystems' old-timers (including James Gosling), needed a programming language for a new set of consumer- electronics devices they were building. Gosling developed the language and called it "Oak". Upon finding out that the name Oak was taken, a late-night meeting at a local cafe inspired the new name--Java.

The Java programming language was developed as a small-footprint object- oriented programming language. It was loosely based on C++, but was designed to be processor-independent and network savvy.

The work that resulted in the invention of the Java Platform was focused on producing an interactive computer-television system that enabled the functionality provided in today's set top boxes--email, web browsing, TV programming, and more. It originally encompassed both hardware and software aspects but soon became a software-focused development effort. Taking a page from UNIX's early days, Sun freely released the Java language and platform to get design input and to promote early visibility with developers. The resulting interest and feedback exceeded all expectation, and led to the open design process that is still followed and required for all methods of technology design at Sun.

The Java Platform

Java technology's product possibilities and realities cover a broad range of user environments. Java applets and applications run on platforms that include traditional desktop computers, future JavaOS[tm] generations of networked computers, public terminals, and home-based products. Traditional desktop computers use platforms such as X Windows, Microsoft Windows, and Macintosh; public terminals are things like information kiosks and automatic teller machines (ATMs); and home-based products refer to set-top boxes and environmental control systems, and other personal networks.

People are excited about the Java platform because it allows software engineers to "Write Once, Run Anywhere"[tm] - that is, to develop a single version of an application that can be used on a variety of computers and devices. This means that users will see better integration occurring between their desktop work systems, intermittently connected work systems, personal data assistants (PDAs), and public terminals like ATMs. In this way, large companies, independent software vendors (ISVs), and government agencies benefit because they are able to consolidate the groups of software engineers working on applications for different platforms into one group that is focused on the development of Java applets and applications that will run on any platform.

The Java platform is comprised of two main entities. These are the Java Virtual Machine (JVM) and the Java Application Programming Interface (API). The JVM is the translator and facilitator of communication between Java applets and applications, and the native environment that the Java Platform is running on. The Java API is the set of tools and components with which to build portable applets and applications.

Figure 1 depicts a Java program, such as an application or applet, that is running on the Java platform. The Java API and the Java Virtual Machine insulate the Java program from hardware dependencies.

 

block diagram showing Java program using Java platform to gain platform independence

Figure 1: Java program using Java platform to gain platform independence.


The Java Virtual Machine

The JVM sits on top of other platforms, such as Common Desktop Environment (CDE), Macintosh, and Microsoft Windows. It receives Java program instructions that have been compiled into bytecodes. These bytecodes are not specific to any physical machine, but are machine instructions for a virtual machine. The bytecode is translated into a format the native platform understands, and this capability is what enables the Java Platform's cross-native platform portability.

Figure 2 provides a block diagram illustrating how the cross-platform capability is enabled.


block diagram illustrating how the cross platform capability is enabled

Figure 2: The flow of platform-independent Java code between different platforms.


The Java APIs

The Java APIs, the other half of the Java platform, are a set of software component packages that provide a wide range of functionality with which to build robust applications. A core API set is included in every full implementation of the Java platform. Some of the functionality provided by the core API set includes:

  • The Essentials - objects, strings, threads, numbers, input and output, data structures, system properties, date and time, and more

     

  • GUI toolkit - the Abstract Windowing Toolkit (AWT) and the Swing UI components.

     

  • Applets - the set of conventions used by Java applets

     

  • Networking - URLs, TCP and UDP sockets, and IP addresses

     

  • Internationalization - Help for writing programs that can be localized for users worldwide. Programs can automatically adapt to specific locales and be displayed in the appropriate language.

     

  • Security - both low-level and high-level, including electronic signatures, public/private key management, access control, and certificates

     

  • Software components - known as JavaBeans[tm] components, which can plug into existing component architectures, such as Microsoft's OLE/COM/Active-X architecture, OpenDoc, and Netscape's Live Connect

     

  • Object serialization - allows lightweight persistence and communication via Remote Method Invocation (RMI)

     

  • Java Database Connectivity (JDBC[tm]) - provides uniform access to a wide range of relational databases
While powerful in itself, the Java platform allows additional capabilities to be added to it. The support for extending the core API set is provided by the extensions framework. This support enables developers to add functionality in areas the platform does not provide. Additionally, Sun ships a number of standard extensions, including the Swing components and Java[tm] Accessibility Utilities, as a core part of its Java[tm] 2.

Java Accessibility Product Design

Not all of the technologies mentioned above will play an active role in enabling accessibility on the Java TM Platform. The following are brief descriptions of specific technologies that make accessible product design possible.

  • Java[tm] Foundation Classes (J.F.C.): Consist of the Swing user-interface (UI) classes, the Pluggable Look & Feel (PLAF), Java 2D[tm], the Java Accessibility API, and support for drag-and-drop between multiple Java applications as well as between Java applications and applications running on a host OS.

     

  • Java Accessibility API and Utilities: The API is built directly into the Swing UI classes, the Utilities include sample "assistive technologies", Java-to-native platform bridge, and AWT translators.

     

  • Abstract Window Toolkit (AWT): The AWT is the standard API for providing peered or heavyweight graphical user interfaces (GUIs) for Java programs. Peered components are Java (J) components with partner components of similar type that are provided by the native OS.

     

  • JavaSpeech: Java Speech provides support for both text to speech and speech recognition on the Java Platform.

     

  • Java[tm] Native Interface (JNI): The JNI is a standard programming interface for calling native platform methods in Java applets and applications, and embedding the Java virtual machine (JVM) into native applications.

     

  • Remote Method Invocation (RMI): A technology that provides for JVM to JVM communication, both local and remote.

     

  • Reflection mechanism: This technology supports querying the public fields of any Java language object running in a JVM.

     

  • JavaOS[tm]: This operating system is designed for network computers (such as the JavaStation). The JavaOS contains full support for graphics, windowing, networking, and a host of other services

Last, but not least, is the Java Language which acts as the on-ramp to all the power provided by the Java platform. The Java language is simple, yet flexible and powerful; object-oriented (with single inheritance); statically typed, multithreaded, and dynamically linked. Its syntax is based on C and C++, so that those programmers can learn it quite easily. Finally, its strong data typing, automatic garbage collection, array bounds checking, lack of automatic type coercion, and the lack of the pointer data type encourages catching bugs early, during the development cycle.

The Java Foundation Classes User Interface Components (Swing)

Swing extends the original Abstract Windowing Toolkit (AWT) by adding a rich set of graphical user interface (GUI) components that are completely portable and delivered as part of the Java platform. Examples of components include push button, menubar, text pane, and table.

Application developers are attracted to Swing because these GUI components and foundation services greatly simplify the development and deployment of 100% Pure Java[tm] applications for the Internet, intranet and desktop environments. By being 100% Pure, developers get around a big limitation of the AWT that relies on user-interface code that's native to whatever operating system they're running on. If one native platform's GUI toolkit doesn't support a component, e.g., a tabbed pane, then the AWT wouldn't support it. Doing so would break the AWT's cross-platform capabilities.

With its Pluggable Look and Feel (PLAF), Swing also allows developers to create applications that reflects the operating system on which it runs, or use the GUI components to create their own platform-independent interface. Examples include an audio-based user interface and the new Java look-and-feel that ships with the Java Development Kit.

Swing excels on the accessibility support front. For the first time, accessibility has informed the design of and been built into a commercial UI toolkit. The Accessibility team worked closely with the Swing team to help design accessibility into the toolkit, to contributed code to the development effort, and to fix accessibility problems in components that were uncovered by the developer community at large. The team also built the Java Accessibility API directly into its user-interface components. As a consequence, the Accessibility API is covered in nearly all of the programming guideline books published on the Java Foundation Classes. Further information on the API is provided in the next section.

Another industry-leading feature is Swing's PLAF architecture. The pluggable look-and-feel raises the bar in a new way. Today's assistive technologies, such as screen readers and screen magnifiers, are essentially interpreters of information presented in pre-determined formats. The ideal would be to provide architectural support into the GUI components such that the user could choose the manner in which information was presented to them. For example, an audio instead of, or in addition to, a visual display. Swing's PLAF architecture takes a significant step towards enabling this future vision of product accessibility - direct access without the need of an adjunct assistive technology. Further information on the PLAF is provided in the next section.

Mouseless interaction, like a built-in Accessibility API, is another key requirement of users with disabilities. All interactive Swing components have keyboard navigation support already implemented on them, making it even easier for developers to build accessible applets and applications. The keybindings are look-and-feel dependent and, in the case of Windows and CDE, are based on the specifications provided by the interface design guidelines associated with these platforms. The specific keybindings can be obtained in the javadoc entries for each component.

The Technical Side of Java Accessibility

The work described below comes from several sources: an in-depth review of accessibility requirements for the Java platform as specified in an evaluation and report commissioned by Sun in March, 1996; a 3-day meeting hosted by Sun in February, 1997; the expertise and background knowledge of the members of the Sun Accessibility team; and the ongoing feedback from IBM, Trace Research, the University of Toronto, assistive technology vendors, and the larger disability community. The following four sections provide a brief overview of this work.

The Java Accessibility API

The Java Accessibility API defines a contract between the individual user interface components that make up a Java application and an assistive technology that provides access to that Java application. If a Java application fully supports the Java Accessibility API, then it should be compatible with, and friendly toward, assistive technologies such as screen readers, screen magnifiers, etc. With a Java application that fully supports the Java Accessibility API, all text is fully exposed so no off-screen model is necessary. Also, while the API is built into and helped inform the design of the Swing components, it was designed to be both toolkit independent and extendable. This means it can readily account for new types of, or custom, components as well as be implemented on other toolkits.

The Java Accessibility Utilities

In order to provide access to Java applications, an assistive technology requires more than the Java Accessibility API. Utility tools are also necessary in order to provide the necessary support for assistive technologies to locate and query user interface objects inside a Java application running in a Java Virtual Machine. These tools also provide support for installing "event listeners" into these objects, event tracking, and support for loading assistive technologies into the Java Virtual Machine. Finally, example tools are provided with the package that highlight how to enable assistive technologies to interact with the Accessibility API support built into Swing components. All these tools are provided in the Java Utilities package.

The Java Accessibility Bridge

Java applications run on a wide variety of host operating systems, many of which already have assistive technologies available for them (e.g., Macintosh, OS/2, Microsoft Windows). In order for these existing assistive technologies to provide access to Java applications, they need a bridge between themselves in their native environment(s), and the Java Accessibility support that is available from within the Java Virtual Machine (JVM). This bridge, by virtue of the fact that it has one end in the JVM and the other on the native platform, provides this pathway. Sun is currently developing a bridge for the Win32 platform in cooperation with assistive technology vendors and the various platform vendors.

The Pluggable Look and Feel of the Java Foundation Classes

The JFC is a set of user-interface building blocks that separate the state and model of information from the presentation of that information. Programs built with the JFC are not tied to a specific representation of their information (e.g., a specific list box, menu bar, or push button), but can instead allow its presentation to be programmatically determined, and can be chosen by the user. This is exciting because users will no longer need an interpretive assistive technology, a screen reader for example, but instead may purchase and specify in his or her configuration a set of audio- or tactile-based presentation tools instead of or along with a generic or customized visual presentation. So when a JFC-based program runs on this user's system and their system is configured correctly, information will be presented via one or more of these alternate modality channels. In this fashion, we have hope that the PLAF will, for the first time, enable direct accessibility in mainstream applications providing.

Jini[tm] Technology

The Jini Technology vision starts with the fact that smart devices are nearly everywhere and that their numbers are increasing. Today, without JiniTM connection technology, devices such as TVs, DVDs, cameras, radios, furnaces, printers, pagers require expert help to install, network, configure, and so on. With Jini technology, devices can affordably contain processors powerful enough for them to self-install, self-organize into communities, self-configure, and self-diagnose. Jini technology reduces dependence on system administrators, potentially lowering support costs and allowing impromptu device communities to assemble in places far from the traditional office.

 

Consider this scenario. Three strangers from three companies--on the road to jointly bid a job. Among them they have a laptop, a project disk drive with data & applications, a PDA, a cell phone, and a clamshell pager--and their presentation is not ready. Their hotel suite has a small network: scattered net jacks, a couple of infrared & short-range RF transceivers, and though they never worked together before, they have snapped into an impromptu working community. The suite has an Internet gateway & low-resolution printer. The TV, the VCR, and the set-top box are connected to the same network. As they work they use all the services in the room, including those on each other's devices. Plug in the disk & PDA, turn on the laptop & TV--total setup time: 2 minutes.

While one of them edits the presentation, the others watch it unfold, mirrored on the TV. From time to time one of them takes the laptop to another hotel room to concentrate on a section while the others keep working, running simulations from the project disk on the gateway & viewing results on the TV. Sometimes one of them prints a slide or graph to proof. With the clamshell they fetch files from offices & email questions. Using the cell phone as a remote, they order room service through the TV & check their flights.

When they're done, they need a high-resolution set of overheads. From the pager they reserve the hotel's high-res color printer for 15 minutes--it's in a small room down the hall. Using the suite key programmed by the reservation service to open the room, one of them goes into the printer room, loads foils bought from online room service, and phones into the suite's network to start printing.

Introducing accessibility into this scenario, any one of the collaborators in it could be someone with a disability but that would not matter because they would be collaborating using their own accessible smart device. This could be a laptop, PDA, or some other portable notetaker. Think the above does not apply to you? Instead, imagine a scenario where a public building has a Jini compliant directory system that gives you directions and guides you to your destination through your own personal smart device which also happens to be the same device you use at home to control your stereo, TV, thermostat, ... Or perhaps you need to use an Information Kiosk but are a quadrepeligic. Jini enables your laptop to interact with the kiosk and check on the availability of your favorite book or what your favorite store's hot sales are...

Jini is a complimentary part of a strategy where the Java platform (through the JFC), provides support that allows someone to physically interact with a device such as a Kiosk while Jini enables access to the same device to someone who can't physically use it by external means.

Java Accessibility, the Bigger Picture

So far, this paper has discussed the successes to date in building accessibility support directly into components used to build user interfaces, getting information about this out to the broader developer community, and enabling an architecture that can support choice in how users interact with and are presented information. For the most part, however, these are related to efforts that are primarily architecture based.

Experience shows us that true access takes much more than architectural support. This section enumerates several additional steps necessary to enable a broadly accessible digital world and provides status updates on Sun's and other's work. We welcome your comments on entries we missed, please send them to us at access@sun.com.

  • An Accessibility API and underlying architecture that supports communication and object interaction between assistive technologies and applications or enables a person to directly access information without the need of a special assistive technology.
    Status: Implemented on Swing and discussed above.

     

  • Documentation on the underlying accessibility support broadly documented in general programming books.
    Status: Most JFC programming books provide this coverage.

     

  • Accessible design and testing tips included in interface design and programming guideline texts books.
    Status: IBM has made an excellent start with their set of publicly available guidelines.

     

  • Assistive Technology Vendors who provide technical review and input on then develop products that are compatible with the Accessibility API.

     

  • Commercial and internal ISVs in all categories who utilize the guidelines mentioned above to help establish and meet accessible design criteria, develop these products utilizing the development tools covered in the next bullet where possible and practical, and then establish an improvement roadmap where applicable.

     

  • Developer tools that support the Accessibility API in the UI and development environment, expose the properties associated with the Accessibility API to developers, and provide accessibility lint type features that perform basic accessibility evaluations of the app/let in design.

     

  • On-line information and help in applications and on the web that is written in accessible formats.

     

  • Customer service and field representatives who are familiar with the accessibility support in their products, know what compatible assistive technologies are available, understand how the state of current legislation and accessible products that are available can be factored into aiding sales, and can help customers fulfill their accessibility needs.

     

  • Most importantly, customers who demand products that support, promote, and enable accessibility - companies do respond to customer demand, especially when big bucks are involved. This would include agencies, education, and corporations setting contract requirements for accessible technology in new contracts, internal employees in these organizations who represent the concerns of employees with disabilities tracking and influencing new purchases and working with and pressuring internal development groups to develop accessible internal applications, individuals joining advocacy groups whose charter includes tracking the state of accessibility in products and applying pressure on manufacturers as required, and employees and students actively tracking and influencing decisions that result in the choice or development of applications crucial to the successful completion of their work.

Looking Ahead

The Java platform is designed to power much more than desktop systems. Most of this paper has dealt primarily with the development efforts that pertain to access to desktop types of systems (e.g., PC, laptop, etc.). But, the Java platform also powers consumer electronic devices, such as set top boxes and smart phones, which are powered by the Personal and Embedded portions of the Java platform as well as Jini Technology.

Sun has recently begun looking into interaction requirements for categories of consumer devices. The goal is to determine what an underlying architecture for these devices must provide to enable accessibility in products. While there is still much to do, some requirements have bubbled up already. The reality Sun found was that these devices each have common, as well as unique, accessible interaction requirements associated with them. Many devices also have very tight memory constraints which means if a technology isn't deemed needed, it isn't included. And, unlike desktop systems, some of these devices will be targeted to specific consumer groups or interaction environments which may not be practical for use by some major disability types

These are difficult design challenges to account for - that being the design an architecture in components that can expand to provide desktop-like accessibility support as perhaps a set top box requires - and - contract to nearly nothing in a small device whose interaction modality simply can't or won't be expanded to account for one or more types of disabilities.

In Closing

We have made much headway in making the Java platform enable, support, and promote accessible design. The accessibility API and pluggable look-and-feel set new standards in platform access, and we have desktop-related refinements to this work we want to add in future releases to make the platform even better.

There is much work remaining in getting accessibility support fully enabled in end-user applications and building accessibility support into the architecture used in consumer devices. You, too, have work to do if you want to enable the Java applications you will soon be using to be accessible. You need to speak up so application developers and assistive technology vendors hear you and take the call seriously.

Together we really can make a difference.

 

For more information:

 



Click to go back one page

th11.jpg (990 bytes)

Home | Search | About | Offices | Manufacturers | Products | Services | Ordering
 Data101 | Training | Mailing | Hot ProductsDigital HQ | EmploymentEmail

 
Copyright© 2008 [Pulse, Inc.]. All rights reserved.
Pulse, Inc.
Tel: (toll free): 888-785-7393   Int'l: 1-951-694-1173  Fax: 1-951-694-1173 

Sales: sales