2013-05-12 4 views
0

Несмотря на то, что я импортирую библиотеку апплетов, NetBeans не может распознавать и использовать getDocumentBase() в моем коде, у меня есть мой html-файл в моем проекте и все другие необходимые файлы, вот часть моего кода:Получение ошибки «Не удается найти символ» на getdocumentBase()

import java.awt.*; 
import java.applet.*; 


public class AirportCanvas extends Canvas 
{ 
    SingleLaneAirport controller; 

    Image redPlane; 
    Image bluePlane; 
    Image airport; 

    //AudioClip crashSound; 

    int[] redX,redY,blueX,blueY; 

    int maxCar = 2; 

    final static int initredX = 5; 
    final static int initredY = 55; 
    final static int initblueX = 410; 
    final static int initblueY = 130; 
    final static int bridgeY = 90; 

    boolean frozen = false; 
    int cycleTime = 20; 

    AirportCanvas(SingleLaneAirport controller) 
    { 
     super(); 
     this.controller = controller; 

//  crashSound=controller.getAudioClip(controller.getDocumentBase(),"crash.au"); 

     MediaTracker mt; 
     mt = new MediaTracker(this); 

     redPlane = controller.getImage(controller.getDocumentBase(), "redplane.png"); 
     mt.addImage(redPlane, 0); 

     bluePlane = controller.getImage(controller.getDocumentBase(), "blueplane.png"); 
     mt.addImage(bluePlane, 1); 

     airport = controller.getImage(controller.getDocumentBase(), "airport.png"); 
     mt.addImage(airport, 2); 

     try 
     { 
      mt.waitForID(0); 
      mt.waitForID(1); 
      mt.waitForID(2); 
     } 
     catch (java.lang.InterruptedException e) 
     { 
      System.out.println("Couldn't load one of the images"); 
     } 

     setSize(airport.getWidth(null),airport.getHeight(null)); 
     init(1); 
    } 

    public final void init(int ncars) 
    { //set number of cars 
     maxCar = ncars; 
     frozen = false; 
     redX = new int[maxCar]; 
     redY = new int[maxCar]; 
     blueX = new int[maxCar]; 
     blueY = new int[maxCar]; 

     for (int i = 0; i<maxCar ; i++) 
     { 
      redX[i] = initredX - i*85; 
      redY[i] = initredY; 
      blueX[i] =initblueX + i*85; 
      blueY[i] =initblueY; 
     } 

     repaint(); 
    } 

    Image offscreen; 
    Dimension offscreensize; 
    Graphics offgraphics; 

    public void backdrop() 
    { 
     Dimension d = getSize(); 

     if ((offscreen == null) || (d.width != offscreensize.width) 
           || (d.height != offscreensize.height)) 
     { 
      offscreen = createImage(d.width, d.height); 
      offscreensize = d; 
      offgraphics = offscreen.getGraphics(); 
      offgraphics.setFont(new Font("Helvetica",Font.BOLD,36)); 
     } 

     offgraphics.setColor(Color.lightGray); 
     offgraphics.drawImage(airport,0,0,this); 
    } 

    @Override 
    public void paint(Graphics g) 
    { 
     update(g); 
    } 

    @Override 
    public void update(Graphics g) 
    { 
     backdrop(); 

     for (int i=0; i<maxCar; i++) 
     { 
      offgraphics.drawImage(redPlane,redX[i],redY[i],this); 
      offgraphics.drawImage(bluePlane,blueX[i],blueY[i],this); 
     } 

     if (blueY[0]==redY[0] && Math.abs(redX[0]+80 - blueX[0])<5) 
     { 
      offgraphics.setColor(Color.red); 
      offgraphics.drawString("Crunch!",200,100); 
      frozen=true; 
//   crashSound.play(); 
     } 

     g.drawImage(offscreen, 0, 0, null); 
    } 

    //returns true for the period from just before until just after car on bridge 
    public boolean moveRed(int i) throws InterruptedException 
    { 
     int X = redX[i]; 
     int Y = redY[i]; 

     synchronized (this) 
     { 
      while (frozen) 
       wait(); 

      if (i==0 || Math.abs(redX[i-1] - X) > 120) 
      { 
       X += 2; 

       if (X >=500) 
       { 
        X = -80; Y = initredY; 
       } 

       if (X >=60 && X < 290 && Y<bridgeY) 
        ++Y; 

       if (X >=290 && Y>initredY) 
        --Y; 
      } 

      redX[i]=X; 
      redY[i]=Y; 
      repaint(); 
     } 

     Thread.sleep(cycleTime); 

     return (X>25 && X<400); 
    } 

    //returns true for the period from just before until just after car on bridge 
    public boolean moveBlue(int i) throws InterruptedException 
    { 
     int X = blueX[i]; 
     int Y = blueY[i]; 

     synchronized (this) 
     { 
      while (frozen) 
       wait(); 

      if (i==0 || Math.abs(blueX[i-1] - X) > 120) 
      { 
       X -= 2; 

       if (X <=-80) 
       { 
        X = 500; Y = initblueY; 
       } 

       if (X <=370 && X > 130 && Y>bridgeY) 
        --Y; 

       if (X <=130 && Y<initblueY) 
        ++Y; 

       blueX[i]=X; 
      } 

      blueY[i]=Y; 
      repaint(); 
     } 

     Thread.sleep(cycleTime); 
     repaint(); 

     return (X>25 && X<400); 
    } 

    public synchronized void freeze() 
    { 
     frozen = true; 
    } 

    public synchronized void thaw() 
    { 
     frozen = false; 
     notifyAll(); 
    } 
} 

однополосной Аэропорт класс:

import java.awt.*; 
import java.awt.event.*; 
import java.applet.*; 

public class SingleLaneAirport { 
    AirportCanvas display; 
    Button restart; 
    Button freeze; 
    Button onecar; 
    Button twocar; 
    Button threecar; 
    Checkbox fair; 
    Checkbox safe; 
    boolean fixed = false; 
    int maxCar = 1; 

    Thread red[]; 
    Thread blue[]; 

    @Override 
    public void init() 
    { 
     setLayout(new BorderLayout()); 
     display = new AirportCanvas(this); 
     add("Center",display); 
     restart = new Button("Restart"); 

     restart.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
      display.thaw(); 
      } 
     }); 

     freeze = new Button("Freeze"); 

     freeze.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
      display.freeze(); 
      } 
     }); 

     onecar = new Button("One Car"); 

     onecar.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
      stop(); 
      maxCar = 1; 
      start(); 
      } 
     }); 

     twocar = new Button("Two Cars"); 

     twocar.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       stop(); 
       maxCar = 2; 
       start(); 
      } 
     }); 

     threecar = new Button("Three Cars"); 

     threecar.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       stop(); 
       maxCar = 3; 
       start(); 
      } 
     }); 

     safe = new Checkbox("Safe",null,true); 
     safe.setBackground(Color.lightGray); 

     safe.addItemListener(new ItemListener() 
     { 
      public void itemStateChanged(ItemEvent e) 
      { 
       stop(); 
       start(); 
      } 
     }); 

     fair = new Checkbox("Fair",null,false); 
      fair.setBackground(Color.lightGray); 

     fair.addItemListener(new ItemListener() 
     { 
      public void itemStateChanged(ItemEvent e) 
      { 
       stop(); 
       start(); 
      } 
     }); 

     Panel p1 = new Panel(); 
     p1.setLayout(new FlowLayout()); 
     p1.add(freeze); 
     p1.add(restart); 
     p1.add(onecar); 
     p1.add(twocar); 
     p1.add(threecar); 
     p1.add(safe); 
     p1.add(fair); 
     add("South",p1); 
     setBackground(Color.lightGray); 
    } 

    @Override 
    public void start() 
    { 
     red = new Thread[maxCar]; 
     blue = new Thread[maxCar]; 
     display.init(maxCar); 
     Airport b; 

     if (fair.getState() && safe.getState()) 
      b = new FairAirport(); 
     else if (safe.getState()) 
      b = new SafeAirport(); 
     else 
      b = new Airport(); 

     for (int i = 0; i<maxCar; i++) 
     { 
      red[i] = new Thread(new RedPlane(b,display,i)); 
      blue[i] = new Thread(new BluePlane(b,display,i)); 
     } 

     for (int i = 0; i<maxCar; i++) 
     { 
      red[i].start(); 
      blue[i].start(); 
     } 
    } 

    @Override 
    public void stop() 
    { 
     for (int i = 0; i<maxCar; i++) 
     { 
      red[i].interrupt(); 
      blue[i].interrupt(); 
     } 
    } 
} 
+2

Опубликуйте '' SingleLaneAirport класса. –

+1

1) Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). 2) Зачем писать апплет? Если это обусловлено спецификацией. учителем, пожалуйста, обратитесь к [Почему учителя CS должны прекратить преподавать Java-апплеты] (http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should-stop-teaching-java-applets/). 3) Почему AWT, а не Swing? См. Этот ответ на [Swing extras over AWT] (http://stackoverflow.com/a/6255978/418556) по многим причинам, чтобы отказаться от использования компонентов AWT. 4) Обратите внимание, что 'getdocumentBase()' (как в заголовке) имеет неправильный случай. –

+1

Дополнительно к комментарию Рави: код, который вы опубликовали, в значительной степени не имеет значения - удалите его и покажите нам код «SingleLaneAirport». Он распространяется от «Applet» или «JApplet»? –

ответ

2

Ваш класс SingleLaneAirport должен расширить Applet класс для того, чтобы использовать getDocumentBase() функцию.

Поскольку getDocumentBase() является функцией Applet класса, а не Object класс

+0

Я только что увидел это, и теперь я чувствую себя таким глупым, спасибо. – Ben

+0

Не беспокойтесь, товарищ, привет! –

Смежные вопросы