我正在尝试为我的网络课程运行
these applets.当我尝试在浏览器中从链接运行这些时,他们什么也没做.所以我决定尝试在IntelliJ中编译它们,但是当我运行代码时它没有做任何事情.没有返回错误消息.我从源代码中更改代码的唯一方法是添加main方法并删除包声明.以下是我试图运行的Applet:
JAVA代码
/////////////////////////////////////// //LineSimApllet //written by David Grangier,Institut Eurecom,France //david.grangier@eurecom.fr /////////////////////////////////////// //imports import java.awt.*; import java.awt.event.*; import java.awt.image.*; import java.applet.*; import java.util.*; //Applet Class public class LineSimApplet extends Applet { //buttons Button start = new Button("Start"); Button stop = new Button("Reset"); //features lists MyChoice length = new MyChoice(new String[]{"10 km","100 km","1000 km"},new double[]{10E3,100E3,1E6},3); MyChoice rate = new MyChoice(new String[]{"512 kps","1 Mbps","10 Mbps","100 Mbps"},new double[]{512E3,1E6,10E6,100E6},2); MyChoice size = new MyChoice(new String[]{"100 Bytes","500 Bytes","1 kBytes"},new double[]{8E2,4E3,8E3},1); //to simulate time Thread timerThread; TickTask timerTask; boolean simulationRunning = false; //communication line Line myLine; public void init() { try { setBackground(Color.white); add(new Label("Length",Label.RIGHT)); add(length); add(new Label("Rate",Label.RIGHT)); add(rate); add(new Label("Packet size",Label.RIGHT)); add(size); //start start.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { launchSim(); } }); add(start); //stop Button stop = new Button("Reset"); stop.addActionListener( new ActionListener() { public void actionPerformed(ActionEvent event) { stopSim(); //clear line myLine.sendTime(0); //redraw cleared line LineSimApplet.this.repaint(); } }); add(stop); //line myLine = new Line(40,50,450,10); } catch (Exception e) { e.printStackTrace(); } } public void paint(Graphics g) { update(g); // eliminate flashing : update is overriden } public void update(Graphics g) { //work on a offscreen image Dimension offDimension = getSize(); Image offImage = createImage(offDimension.width,offDimension.height); Graphics offGraphics = offImage.getGraphics(); myLine.drawLine(offGraphics); //sender offGraphics.setColor(Color.blue); offGraphics.fillRect(10,40,30,30); offGraphics.setColor(Color.black); offGraphics.drawString("Sender",5,90); offGraphics.drawRect(10,30); //receiver offGraphics.setColor(Color.blue); offGraphics.fillRect(490,30); offGraphics.setColor(Color.black); offGraphics.drawString("Receiver",485,90); offGraphics.drawRect(490,30); offGraphics.drawString("Propagation speed : 2.8 x 10^8 m/sec",175,105); //display offscreen image g.drawImage(offImage,this); } private void launchSim() { setupEnabled(false); //setup line myLine.setup(length.getVal(),rate.getVal()); myLine.emitPacket(size.getVal(),0); //setup timer timerTask = new TickTask(1E-5,myLine.totalTime()); timerThread = new Thread(timerTask); //start simulation simulationRunning = true; timerThread.start(); } private void stopSim() { timerTask.endNow(); simulationRunning = false; setupEnabled(true); } public void setupEnabled(boolean value) { start.setEnabled(value); length.setEnabled(value); rate.setEnabled(value); size.setEnabled(value); } //my choice class MyChoice extends Choice { private double vals[]; public MyChoice(String items[],double values[],int defaultValue) { for (int i = 0; i < items.length; i++) { super.addItem(items[i]); } vals = values; select(defaultValue - 1); } public double getVal() { return vals[super.getSelectedIndex()]; } } //tickTask class TickTask implements Runnable { private double counter; private double length; private double tick; public TickTask(double t,double l) { length = l; tick = t; counter = 0; } public void run() { while (LineSimApplet.this.simulationRunning) { counter += tick; LineSimApplet.this.myLine.sendTime(counter); LineSimApplet.this.repaint(); if (counter >= length) { LineSimApplet.this.myLine.clearPackets(); LineSimApplet.this.timerThread.suspend(); } try { LineSimApplet.this.timerThread.sleep(50); } catch (Exception e) { } } } public void endNow() { length = counter; } } } //Line class class Line { //graphic variables private int gX; private int gY; private int gWidth; private int gHeight; //characteristic variables final double celerity = 2.8E+8; private double length; private double rate; //simulation variables private double time; private Packet myPacket; public Line(int x,int y,int w,int h) { //graphic init gX = x; gY = y; gWidth = w; gHeight = h; } public void setup(double l,double r) { length = l; rate = r; } void sendTime(double now) { time = now; //update time removeReceivedPackets(now); } void emitPacket(double s,double eT) { myPacket = new Packet(s,eT); } private void removeReceivedPackets(double now) { if (!(myPacket == null)) { if (now > myPacket.emissionTime + (myPacket.size / rate) + length * celerity) { clearPackets(); } } } public void clearPackets() { myPacket = null; } public double totalTime() { double emmissionTime = (myPacket.size / rate); double onLineTime = (length / celerity); return (emmissionTime + onLineTime); } public void drawLine(Graphics g) { g.setColor(Color.white); g.fillRect(gX,gY + 1,gWidth,gHeight - 2); g.setColor(Color.black); g.drawRect(gX,gY,gHeight); g.setColor(Color.red); g.drawString(timeToString(time),gX + gWidth / 2 - 10,gY + gHeight + 15); drawPackets(g); } private void drawPackets(Graphics g) { if (!(myPacket == null)) { double xfirst; double xlast; //compute time units xfirst = time - myPacket.emissionTime; xlast = xfirst - (myPacket.size / rate); //compute position xfirst = xfirst * celerity * gWidth / length; xlast = xlast * celerity * gWidth / length; if (xlast < 0) { xlast = 0; } if (xfirst > gWidth) { xfirst = gWidth; } //draw g.setColor(Color.red); g.fillRect(gX + (int) (xlast),(int) (xfirst - xlast),gHeight - 2); } } static private String timeToString(double now) { String res = Double.toString(now * 1000); int dot = res.indexOf('.'); String deci = res.substring(dot + 1) + "000"; deci = deci.substring(0,3); String inte = res.substring(0,dot); return inte + "." + deci + " ms"; } public static void main(String[] args) { LineSimApplet ls = new LineSimApplet(); ls.init(); } } class Packet { double size; double emissionTime; Packet(double s,double eT) { size = s; emissionTime = eT; } }
如何使用IntelliJ运行此applet?
解决方法
在IntelliJ中运行Applet的最简单方法是
creating和
Applet Run/Debug Configuration.只需单击显示要执行的主类名称的小下拉列表,单击“编辑配置…”,然后单击绿色按钮,然后选择“Applet”并将LineSimApplet指定为目标Applet类.
你的主要方法方法不起作用的原因是因为Applets are not meant to be run as standalone applications,但是如果你想以这种方式运行它,最简单的方法是add it to a JFrame
.