Problem z kompilacją...

0

Tak jak w temacie mam problem z kompilacją programu, który po kliknięciu myszyką w różnych miejscach na ekranie odtwarza dźwięki.

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

public class Sound extends Applet implements MouseListener
{
  AudioClip audioClip1, audioClip2, audioClip3, audioClip4;
  FilledRectangle rect1, rect2, rect3, rect4;
  Color color1, color2, color3, color4;
public void init()
{
  addMouseListener (this);
  audioClip1 = getAudioClip (getDocumentBase(), "ding.au");
  audioClip2 = getAudioClip (getDocumentBase(), "beep.au");
  audioClip3 = getAudioClip (getDocumentBase(), "yahoo1.au");
  audioClip4 = getAudioClip (getDocumentBase(), "yahoo2.au");
  rect1 = new FilledRectangle (50, 50, 200, 100);
  rect2 = new FilledRectangle (350, 50, 200, 100);
  rect3 = new FilledRectangle (50, 250, 200, 100);
  rect4 = new FilledRectangle (350, 250, 200, 100);
  color1 = Color.red;
  color2 = Color.orange;
  color3 = Color.yellow;
  color4 = Color.blue;
  }
  public void paint (Graphics gDC)
  {
    gDC.setColor(color1);
    rect1.draw(gDC);
    gDC.setColor(color2);
    rect2.draw(gDC);
    gDC.setColor(color3);
    rect3.draw(gDC);
    gDC.setColor(color4);
    rect4.draw(gDC);
    }
    public void mousePressed (MouseEvent evt)
    {
      int x = evt.getX();
      int y = evt.getY();
      if (rect1.contains(x, y)){
      audioClip1.play();
      }
      else if (rect2.contains(x, y))
      {
        audioClip2.play();
        }
        else if (rect3.contains(x, y))
        {
          audioClip3.play();
          }
          else if (rect4.contains(x, y))
          {
            audioClip4.play();
            }
        }
        public void mouseExited (MouseEvent evt){}
        public void mouseEntered (MouseEvent evt){}
        public void mouseReleased (MouseEvent evt){}
        public void mouseClicked (MouseEvent evt){}
}

konsola wyświetla mi takie błędy podczas kompilacji:
user image
oraz klasa FilledRectangle (ta klasa mi się kompiluje)

import java.awt.*;

public class FilledRectangle extends Rectangle
{
  public FilledRectangle(int x, int y, int width, int height)
  {
    super (x, y, width, height);
    }
    public void draw(Graphics gDC)
    {
      gDC.fillRect (x, y, width, height);
      }
}  

Gdzie jest problem? Może ktoś wie, bo ja już na to pomysłów nie mam.

0

Czy skompilowana klasa FilledRectangle jest w tym samym katalogu co klasa Sound ? Jeżeli jest, to jak wygląda zmienna środowiskowa CLASSPATH ? Czy zawiera katalog bieżący ?

0

Czy skompilowana klasa FilledRectangle jest w tym samym katalogu co klasa Sound ?

mam tylko jedną klase FilledRectangle, plik z rozszerzeniem Sound.java nie chce mi się skompilować i utworzyć tejże klasy.

Tak wszystkie pliki(.java, .class, .au,) są w jednym folderze.
CLASSPATH jest zdefiniowana scieżka do folderu gdzie się powyższe pliki znajdują.

Może w pliku Sound.java jakoś trzeba zainportować clase FilledRectangle? Próbowałem w nagłówku wpisywać import FilledRectangle.*; ale i tak wyświetlało jeden błąd.

0

Odpal javac z parametrem -classpath sciezka\do\projektu

A najlepiej użyj IDE takiego jak Eclipse, zamiast się męczyć z ręczną kompilacją.

0

no odapalam ze ścieżką dostępu i nic, w ogóle jakby coś ze ścieżką było nie tak to raczej pliku FilledRectangle też mi nie powinno kompilować - czyż nie?

powtarzam jeszcze raz, może w pliku Sound.java trzeba podać scieżke do FilledRectangle.class ?

0

fikuss napisał

no odapalam ze ścieżką dostępu i nic, w ogóle jakby coś ze ścieżką było nie tak to raczej pliku FilledRectangle też mi nie powinno kompilować - czyż nie?

Nie masz racji, klasa FilledRectangle zależy tylko od klas "systemowych" więc się skompiluje.
Jeśli CLASSPATH ma poprawną wartość (w co nie wierzę), to niczego nie trzeba dopisywać w klasie Sound.

0

A może ty masz pliki źródłowe w różnych katalogach ?
P.S. Wrzuciłem twoje pliki źródłowe do pierwszego katalogu, który się nawinął i skompilowałem.

0

W jedym folderze mam wszystkie pliki.
a ten classpath gdzie ma być zdefiniowany? W zmiennych systemowych czy w zmiennych użytkownika? U mnie jest classpath w zmiennych użytkownikach.

0

Masz opalić javac w ten sposób
javac -classpath scieżka\do\źródeł ścieżka\do\pliku.java
np
javac -classpath \projekt\source \projekt\source\Sound.java

A ponieważ robienie tego ręcznie jest wkurzające, korzystaj z jakiegoś IDE

0

Pisanie

javac -classpath \projekt\source \projekt\source\Sound.java
jest rzeczywiście wkurzające, ale nawet bez IDE nie jest konieczne. Wystarczy tak
javac -cp . Sound.java

opcje -classpath oraz -cp są równoważne. . oznacza katalog bieżący.

1 użytkowników online, w tym zalogowanych: 0, gości: 1