📄 viewer.java
字号:
package concurrency.viewer;
import java.awt.*;
import java.applet.*;
import java.net.URL;
import java.util.*;
import java.awt.Image;
import java.awt.Graphics;
import java.awt.image.ColorModel;
import sun.audio.*;
class Viewer extends Frame {
MenuBar mb;
Menu example;
Menu chapter[] = new Menu[12];
MenuItem about, cruise,countdown,threaddemo,garden,carpark,semademo,
buffer,nestedmonitor, fixednestedmonitor,
diners,fixeddiners,bridge,readwrite,readwritepriority,readwritefair,
golfclub,golfclubfifo,golfclubbounded,joindemo,
syncmsg,selmsg,asyncmsg,rendezvous,
fixedcruise,primes,supwork,announce,parcel,invaders,quit;
Applet applet = null;
MyAppletStub stub;
MyAppletContext context;
public Viewer() {
mb = new MenuBar();
example = new Menu("Example");
mb.add(example);
for (int i=0; i<12 ; ++i) {
chapter[i] = new Menu("Chapter "+(i+1));
example.add(chapter[i]);
}
about = new MenuItem("About Example Viewer");
example.add(about);
/* Chapter 1 */
cruise = new MenuItem("Cruise Control");
chapter[0].add(cruise);
/* Chapter 2 */
countdown = new MenuItem("CountDown");
chapter[1].add(countdown);
/* Chapter 3 */
threaddemo = new MenuItem("Thread Demo");
chapter[2].add(threaddemo);
/* Chapter 4 */
garden = new MenuItem("Garden");
chapter[3].add(garden);
/* Chapter 5 */
carpark = new MenuItem("Car Park");
chapter[4].add(carpark);
semademo = new MenuItem("Semaphore Demo");
chapter[4].add(semademo);
buffer = new MenuItem("Bounded Buffer");
chapter[4].add(buffer);
nestedmonitor = new MenuItem("Nested Monitor");
chapter[4].add(nestedmonitor);
fixednestedmonitor = new MenuItem("Fixed Nested Monitor");
chapter[4].add(fixednestedmonitor);
/* Chapter 6 */
diners = new MenuItem("Dining Philosophers");
chapter[5].add(diners);
fixeddiners = new MenuItem("Fixed Dining Philosophers");
chapter[5].add(fixeddiners);
/* Chapter 7 */
bridge = new MenuItem("Single Lane Bridge");
chapter[6].add(bridge);
readwrite = new MenuItem("Readers Writers");
chapter[6].add(readwrite);
readwritepriority = new MenuItem("Readers Writers-Priority");
chapter[6].add(readwritepriority);
readwritefair = new MenuItem("Readers Writers Fair");
chapter[6].add(readwritefair);
/* Chapter 8 */
fixedcruise = new MenuItem("Fixed Cruise Control");
chapter[7].add(fixedcruise);
/* Chapter 9 */
golfclub = new MenuItem("Golf Club");
chapter[8].add(golfclub);
golfclubfifo = new MenuItem("Golf Club FiFo");
chapter[8].add(golfclubfifo);
golfclubbounded = new MenuItem("Golf Club Bounded Overtaking");
chapter[8].add(golfclubbounded);
joindemo = new MenuItem("Master - Slave");
chapter[8].add(joindemo);
/* Chapter 10 */
syncmsg = new MenuItem("Synchronous Message");
chapter[9].add(syncmsg);
selmsg = new MenuItem("Selective Receive");
chapter[9].add(selmsg);
asyncmsg = new MenuItem("Asynchronous Message");
chapter[9].add(asyncmsg);
rendezvous = new MenuItem("Rendezvous");
chapter[9].add(rendezvous);
/* Chapter 11 */
primes = new MenuItem("Primes Sieve");
chapter[10].add(primes);
supwork = new MenuItem("Supervisor - Worker");
chapter[10].add(supwork);
announce = new MenuItem("Announcer - Listener");
chapter[10].add(announce);
/* Chapter 12 */
parcel = new MenuItem("Parcel Router");
chapter[11].add(parcel);
invaders = new MenuItem("Space Invaders");
chapter[11].add(invaders);
quit = new MenuItem("Quit");
example.add(quit);
setMenuBar(mb);
context = new MyAppletContext();
stub = new MyAppletStub(context);
create(about);
}
void create(MenuItem mi) {
if (applet!=null) {
applet.stop();
remove(applet);
}
setSize(600,400);
if (mi==about) {
applet = new Initial();
/* Chapter 1 */
} else if (mi == cruise) {
stub.setParameter("fixed","FALSE");
applet = new concurrency.cruise.CruiseControl();
/* Chapter 2 */
} else if (mi == countdown) {
applet = new concurrency.CountDown();
/* Chapter 3 */
} else if (mi == threaddemo) {
applet = new concurrency.ThreadDemo();
/* Chapter 4 */
} else if (mi == garden) {
applet = new concurrency.garden.Garden();
/* Chapter 5 */
} else if (mi == carpark) {
applet = new concurrency.carpark.CarPark();
} else if (mi == semademo) {
applet = new concurrency.semaphore.SemaDemo();
} else if (mi == buffer) {
applet = new concurrency.buffer.BoundedBuffer();
} else if (mi == nestedmonitor) {
applet = new concurrency.buffer.NestedMonitor();
} else if (mi == fixednestedmonitor) {
applet = new concurrency.buffer.FixedNestedMonitor();
/* Chapter 6 */
} else if (mi == diners) {
stub.setParameter("Version","First");
applet = new concurrency.diners.Diners();
} else if (mi == fixeddiners) {
stub.setParameter("Version","FIXED");
applet = new concurrency.diners.Diners();
/* Chapter 7 */
} else if (mi == bridge) {
applet = new concurrency.bridge.SingleLaneBridge();
} else if (mi == readwrite){
stub.setParameter("rwClass","ReadWriteSafe");
applet = new concurrency.readwrite.ReadersWriters();
} else if (mi == readwritepriority){
stub.setParameter("rwClass","ReadWritePriority");
applet = new concurrency.readwrite.ReadersWriters();
} else if (mi == readwritefair){
stub.setParameter("rwClass","ReadWriteFair");
applet = new concurrency.readwrite.ReadersWriters();
/* Chapter 8 */
} else if (mi == fixedcruise) {
stub.setParameter("fixed","TRUE");
applet = new concurrency.cruise.CruiseControl();
/* Chapter 9 */
} else if (mi == golfclub){
stub.setParameter("allocatorClass","SimpleAllocator");
applet = new concurrency.golf.GolfClub();
} else if (mi == golfclubfifo){
stub.setParameter("allocatorClass","FairAllocator");
applet = new concurrency.golf.GolfClub();
} else if (mi == golfclubbounded){
stub.setParameter("allocatorClass","BoundedOvertakingAllocator");
applet = new concurrency.golf.GolfClub();
} else if (mi == joindemo) {
applet = new concurrency.JoinDemo();
/* Chapter 10 */
} else if (mi == syncmsg) {
applet = new concurrency.message.SynchMsgDemo();
} else if (mi == selmsg) {
applet = new concurrency.message.SelectMsgDemo();
} else if (mi == asyncmsg) {
applet = new concurrency.message.AsynchMsgDemo();
} else if (mi == rendezvous) {
applet = new concurrency.message.EntryDemo();
/* Chapter 11 */
} else if (mi == primes) {
applet= new concurrency.primes.Primes();
} else if (mi == supwork) {
applet= new concurrency.supwork.SupervisorWorker();
} else if (mi == announce) {
applet= new concurrency.announce.EventDemo();
/* Chapter 12 */
} else if (mi == parcel) {
applet = new concurrency.parcel.ParcelRouter();
} else if (mi == invaders) {
applet = new concurrency.invaders.SpaceInvaders();
} else if (mi == quit) {
System.exit(0);
}
setTitle(mi.getLabel());
add("Center",applet);
applet.setStub(stub);
applet.init();
pack();
show();
applet.start();
}
public boolean action ( Event event, Object arg ) {
if (event.target instanceof MenuItem) {
MenuItem mi=(MenuItem)(event.target);
create(mi);
}
return true;
}
public boolean handleEvent ( Event event ) {
if (event.id == Event.WINDOW_DESTROY) {
System.exit(0);
}
return super.handleEvent(event);
}
public static void main (String args[]) {
Frame frame = new Viewer();
}
}
class MyAppletStub implements AppletStub {
Hashtable parameters = new Hashtable();
AppletContext ac;
MyAppletStub(AppletContext a) {
ac = a;
}
public boolean isActive(){
return true;
}
public URL getDocumentBase(){
try {
URL url = new URL("file", "", System.getProperty("java.home")
+java.io.File.separator+"classes"+java.io.File.separator);
//System.out.println(url.toString());
return url;
} catch (java.net.MalformedURLException e) {
return null;
}
}
public URL getCodeBase(){
return getDocumentBase();
}
public String getParameter(String name) {
return (String)parameters.get(name);
}
public void setParameter(String name, String value) {
parameters.put(name,value);
}
public AppletContext getAppletContext(){
return ac ;
}
public void appletResize(int width, int height){
}
}
class MyAppletContext implements AppletContext {
public AudioClip getAudioClip(URL url) {
return new MyAudioClip(url);
}
public Image getImage(URL url) {
//System.out.println(url.toString());
try {
java.awt.image.ImageProducer prod = (java.awt.image.ImageProducer)url.getContent();
return Toolkit.getDefaultToolkit().createImage(prod);
} catch (java.io.IOException e) {
return null;
}
}
public Applet getApplet(String name) {return null;}
public Enumeration getApplets() {return null;}
public void showDocument(URL url){ }
public void showDocument(URL url, String target) {}
public void showStatus(String status){}
}
class MyAudioClip implements AudioClip {
private AudioData data;
private AudioDataStream stream;
MyAudioClip(URL u) {
try {
AudioStream as= new AudioStream(u.openStream());
data = as.getData();
} catch (Exception ex) {
System.out.println("Failed to get audio clip at: "+u);
}
}
public void play(){
try {
stream = new AudioDataStream(data);
AudioPlayer.player.start(stream);
} catch (Exception ex) {
System.out.println("Failed to play AudioClip:"+ex);
}
}
public void loop(){ play();}
public void stop(){
try{
if (stream!=null) {
AudioPlayer.player.stop(stream);
stream = null;
}
} catch(Exception ex) {
System.out.println("Failed to stop AudioClip:"+ex);
}
}
}
class Initial extends Applet {
String msg =
"\n EXAMPLE VIEWER\n\n" +
" A quick way of executing the demonstration\n"+
" applets from:\n\n"+
" Concurrency: State Models and Java Programs.\n\n"+
" Use the <Example> menu to select an example.\n\n"+
" For the instructions on running an example, \n"+
" use a Web brower by clicking on the button below.\n"+
" The examples will also run in the browser if it \n"+
" supports Java 1.1 or a later release.";
Button browser;
public void init() {
setLayout(new BorderLayout());
TextArea tx = new TextArea(msg,14,45,TextArea.SCROLLBARS_NONE);
add("Center",tx);
tx.setEditable(false);
add("South",browser = new Button("Run examples in Web Browser"));
}
public boolean action ( Event event, Object arg ) {
if (event.target instanceof Button) {
try {
Runtime rt = Runtime.getRuntime();
String cmd[] = new String[3];
cmd[0] = "rundll32.exe";
cmd[1] = "url.dll,FileProtocolHandler";
cmd[2] = System.getProperty("java.home")+java.io.File.separator+"classes"
+java.io.File.separator+"concurrency.html";
rt.exec(cmd);
//outln(mfcom);
} catch(java.io.IOException e) {}
}
return true;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -