NoClassDefFoundError

0

Witam, mam do oddania jutro program symulujacy dostęp do dysków. Napisałem owo cudo, jednakże występuje mały problem z kompilacja. Otrzymuje błąd:

--------------------Configuration: <Default>--------------------
java.lang.NoClassDefFoundError: Symulacja
Caused by: java.lang.ClassNotFoundException: Symulacja
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Exception in thread "main" 
Process completed.

Mam dwa pliki: Symulacja.java :

import java.io.*;
import java.util.Random;

public class Symulacja
{
    public static void main(String args[]) throws IOException
    {
        BufferedReader wej = new BufferedReader(new InputStreamReader(System.in));
        StreamTokenizer str = new StreamTokenizer(wej);
        
        do
        {
            System.out.print("\fPodaj ilosc ciagow testowych: ");
            str.nextToken();
            final int N = (int) str.nval;
            System.out.print("Podaj ilosc zadan w ciagu: ");
            str.nextToken();
            final int LZ = (int) str.nval;
            System.out.print("Podaj rozmiar dysku: ");
            str.nextToken();
            final int RD = (int) str.nval;
            System.out.print("Podaj maksymalny odstep czasu miedzy pojawieniem sie zadan: ");
            str.nextToken();
            final int maxOdstep = (int) str.nval;
            System.out.print("Czy w symulacji moga pojawic się zadania z ograniczeniem czasowym (t/n): ");
            Dysk.REAL_TIME = (wej.readLine().toLowerCase().charAt(0) == 't');
            int DL = 3;
            if (Dysk.REAL_TIME)
                do
                {
                    System.out.print("Srednio co ktore zadanie ma miec ograniczenie czasowe?: ");
                    str.nextToken();
                }
                while((DL = (int) str.nval) < 1);
            
            int sumyPrzemieszczen[] = new int[4];
            int sumyPrzekroczen[] = new int[4];
            Dysk dyski[] = new Dysk[4];
            dyski[0] = new Dysk(RD, Dysk.FCFS);
            dyski[1] = new Dysk(RD, Dysk.SSTF);
            dyski[2] = new Dysk(RD, Dysk.SCAN);
            dyski[3] = new Dysk(RD, Dysk.C_SCAN);
            Random rand = new Random();
            
            for (int i = 0; i < N; i++)
            {
                dyski[0].resetuj(RD, Dysk.FCFS);
                dyski[1].resetuj(RD, Dysk.SSTF);
                dyski[2].resetuj(RD, Dysk.SCAN);
                dyski[3].resetuj(RD, Dysk.C_SCAN);
                
                for (int j = 0; j < LZ; j++)
                {
                    int deadline = -1;
                    if (Dysk.REAL_TIME && rand.nextInt(DL) == 0)
                        deadline = rand.nextInt(RD) + RD/2;
                    int pozycja = rand.nextInt(RD);
                    for (int d = 0; d < 4; d++)
                        dyski[d].dodajZadanie(pozycja, deadline);
                    
                    int odstep = 0;
                    while ((odstep = (int) (-(maxOdstep/2)*Math.log(rand.nextDouble()))) > maxOdstep);
                    for (int c = 0; c < odstep; c++)
                        for (int d = 0;  d < 4; d++)
                            dyski[d].akcja();
                }
                for (int d = 0; d < 4; d++)
                    while (dyski[d].zajety())
                        dyski[d].akcja();
                
                for (int d = 0; d < 4; d++)
                {
                    sumyPrzemieszczen[d] += dyski[d].sumaPrzemieszczen();
                    sumyPrzekroczen[d] += dyski[d].przekroczoneDL();
                }
            }
            
            System.out.println();
            System.out.print("WYNIKI:");
            System.out.print("\nFCFS" + (Dysk.REAL_TIME ? " (EDF):" : ":"));
            System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[0] / N);
            if (Dysk.REAL_TIME)
                System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[0] / N);
            System.out.print("\nSSTF" + (Dysk.REAL_TIME ? " (EDF):" : ":"));
            System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[1] / N);
            if (Dysk.REAL_TIME)
                System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[1] / N);
            System.out.print("\nSCAN" + (Dysk.REAL_TIME ? " (FD-SCAN):" : ":"));
            System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[2] / N);
            if (Dysk.REAL_TIME)
                System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[2] / N);
            System.out.print("\nC-SCAN" + (Dysk.REAL_TIME ? " (FD-SCAN):" : ":"));
            System.out.printf("\nruchy glowicy: %-10.2f ", (double) sumyPrzemieszczen[3] / N);
            if (Dysk.REAL_TIME)
                System.out.printf("przekroczone DL: %.2f", (double) sumyPrzekroczen[3] / N);
            System.out.println();
            
            do
                System.out.print("\nPowtorzyc (t/n) ? ");
            while (str.nextToken() != str.TT_WORD);
        }
        while (str.sval.toLowerCase().charAt(0) != 'n');
        System.out.println("\f\nDziekuje za uwage :)\n");
        wej.read();
        System.out.print('\f');
    }
}

oraz Dysk.java:

public class Dysk
{
    private Element dysk[];
    private Element wartownikDysku;
    private int liczbaZadan;
    private int trybPracy;
    private int pozycjaGlowicy;
    private int celGlowicy;
    private int czas;
    private int przekroczoneDL;
    private int sumaPrzemieszczen;
    
    public static final int FCFS = 1;
    public static final int SSTF = 2;
    public static final int SCAN = 3;
    public static final int C_SCAN = 4;
    
    public static boolean REAL_TIME = true;
    
    public Dysk(int rozmiar, int tryb) throws IllegalArgumentException
    {
        resetuj(rozmiar, tryb);
    }
    
    public void akcja()
    {
        if (celGlowicy != pozycjaGlowicy)
        {
            if (dysk[pozycjaGlowicy] != null)
                switch (trybPracy)
                {   
                    case SCAN:
                        obsluz(pozycjaGlowicy);
                        break;
                    case C_SCAN:
                        if (celGlowicy > pozycjaGlowicy || dysk[celGlowicy].deadline != -1)
                        {
                            obsluz(pozycjaGlowicy);
                            break;
                        }
                    default:
                        pozycjaGlowicy += celGlowicy > pozycjaGlowicy ? 1 : -1;
                        sumaPrzemieszczen++;
                }
            else
            {
                pozycjaGlowicy += celGlowicy > pozycjaGlowicy ? 1 : -1;
                sumaPrzemieszczen++;
            }
        }
        else if (dysk[pozycjaGlowicy] != null)
            obsluz(pozycjaGlowicy);
        else if (trybPracy == 3 || trybPracy == 4)
            celGlowicy = nastepneZadanie();
        
        czas++;
    }
    private void obsluz(int pozycja)
    {
        Element e = dysk[pozycja];
        if (e.deadline != -1 && e.deadline < czas)
            przekroczoneDL++;
        e.poprzedni.nastepny = e.nastepny;
        e.nastepny.poprzedni = e.poprzedni;
        dysk[pozycja] = null;
        liczbaZadan--;
        celGlowicy = nastepneZadanie();
    }
    private int nastepneZadanie()
    {
        if (liczbaZadan > 0)
        {
            Element nastepny = null;
            if (REAL_TIME)
            {
                Element e = wartownikDysku.nastepny;
                while (e != wartownikDysku)
                {
                    if (e.deadline != -1 && (nastepny == null || nastepny.deadline > e.deadline))
                        nastepny = e;
                    e = e.nastepny;
                }
            }
            if (nastepny == null)
            {
                switch (trybPracy)
                {
                    case FCFS:
                        nastepny = wartownikDysku.nastepny;
                        for (Element e = nastepny.nastepny; e != wartownikDysku; e = e.nastepny)
                            if (e.czasZgloszenia < nastepny.czasZgloszenia)
                                nastepny = e;
                        break;
                    case SSTF:
                        Element e = wartownikDysku.nastepny;
                        while (e != wartownikDysku && e.pozycja < pozycjaGlowicy)
                            e = e.nastepny;
                        if (e == wartownikDysku)
                            nastepny = e.poprzedni;
                        else if (e.poprzedni == wartownikDysku)
                            nastepny = e;
                        else
                            nastepny = (e.pozycja - pozycjaGlowicy < pozycjaGlowicy - e.poprzedni.pozycja) ? e : e.poprzedni;
                        break;
                    case SCAN:
                        if (celGlowicy == pozycjaGlowicy)
                        {
                            if (pozycjaGlowicy == dysk.length - 1 && dysk[pozycjaGlowicy] == null)
                                return 0;
                            else if (dysk[pozycjaGlowicy] == null)
                                return dysk.length - 1;
                        }
                        else 
                            return  celGlowicy > pozycjaGlowicy ? dysk.length - 1 : 0;
                    case C_SCAN:
                        if (pozycjaGlowicy == dysk.length - 1 && dysk[pozycjaGlowicy] == null)
                            pozycjaGlowicy = 0;
                        return dysk.length - 1;
                }
            }
            return nastepny.pozycja;
        }
        else
            return pozycjaGlowicy;
    }
    public void resetuj(int rozmiar, int tryb) throws IllegalArgumentException
    {
        if (tryb > 0 && tryb < 5 && rozmiar > 0)
        {
            dysk = new Element[rozmiar];
            wartownikDysku = new Element(null, -1, -2, 0, null);
            wartownikDysku.nastepny = wartownikDysku.poprzedni = wartownikDysku;
            
            trybPracy = tryb;
            sumaPrzemieszczen = liczbaZadan = pozycjaGlowicy = celGlowicy = czas = przekroczoneDL = 0;
        }
        else
            throw new IllegalArgumentException("Nieprawidlowy tryb pracy procesora");
    }
    public boolean zajety()
    {
        return liczbaZadan > 0;
    }
    public boolean dodajZadanie(int pozycja, int deadline)
    {
        if (deadline > -2 && pozycja >= 0 && pozycja < dysk.length && dysk[pozycja] == null)
        {
            Element e = wartownikDysku.nastepny;
            while (e != wartownikDysku && e.pozycja < pozycja)
                e = e.nastepny;
            dysk[pozycja] = e.poprzedni = e.poprzedni.nastepny = new Element(e.poprzedni, pozycja, (deadline == -1 ? -1 : czas + deadline), czas, e);
            liczbaZadan++;
            celGlowicy = nastepneZadanie();
            return true;
        }
        else
            return false;
    }
    public int sumaPrzemieszczen()
    {
        return sumaPrzemieszczen;
    }
    public int czas()
    {
        return czas;
    }
    public int przekroczoneDL()
    {
        return przekroczoneDL;
    }
    
    private class Element
    {
        private int pozycja;
        private int deadline;
        private int czasZgloszenia;
        private Element poprzedni;
        private Element nastepny;
        
        private Element(Element p, int war, int dl, int czas, Element n)
        {
            poprzedni = p;
            pozycja = war;
            deadline = dl;
            czasZgloszenia = czas;
            nastepny = n;
        }
    }
}

Proszę, uświadomcie mi moją tępote i wskażcie, gdzie popełniam błąd...

0

To jest błąd kompilacji czy błąd wykonania ?
Jeśli kompilacji, to spróbuj tak: umieść oba pliki źródłowe w jednym katalogu (usuń z tego katalogu inne pliki *.java) i spróbuj polecenia javac *.java
pozdrawiam

0

To sie dzieje, kiedy wciskam "Run project", wiec na moje to blad wykonania. Probowalem Twojego sposobu i wtedy dostaje taki blad:

Exception in thread "main" java.lang.NoClassDefFoundError: Dysk/java
Caused by: java.lang.ClassNotFoundException: Dysk.java
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
0
javac *.java
java Symulacja

pozdrawiam

0

Probowalem tak jzu wczesniej - nie znajduje mi polecenia javac :/

0

A masz kompilator na komputerze ?
Jeśli tak, to poczytaj o zmiennej środowiskowej PATH, jeśli nie to d**a.

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