Почему я не могу выполнять класс Java, созданный и составленный с Netbeans консолью команд?

У меня есть проект в Netbeans 8.1 и Java 1.8.0_65 64 бит. С IDE выполнение правильно, но когда я пробую выполнять ту же программу с консоли CMD, я получаю типичное сообщение:

Ошибка: он не находился или загрузил главный класс

Сейчас я нахожу себя в папке build который производит Netbeans, где находятся мои составленные классы, и в ней я думаю, что новый класс в notepad я это составляю и выполняю и функционируй хорошо. Однако классу, который я делаю с Netbeans, не удалось выполнить.

Я присоединяю экран с расположением проекта и попытками выполнить класс

introducir la descripción de la imagen aquí

Сейчас, когда я выполняю класс Hello я получаю приветствие, но выполнив StdRandom он дает мне ошибку, которую он говорит. Я добавляю, что я также попробовал составить вручную класс StdRandom которая была успешной и после Вашего выполнения он не удался с ошибкой наверху упомянуто.

introducir la descripción de la imagen aquí

Я добавляю определение класса StdRandom

package fmw.java.com.ceva.algorithms;

import java.util.Random;

public final class StdRandom 
{
    private static Random random;
    private static long seed;

    static
    {
        seed = System.currentTimeMillis();
        random = new Random(seed);
    }

    private StdRandom()
    {}

    public static void setSeed(long s)
    {
        seed = s;
        random = new Random(seed);
    }

    public static long getSeed()
    {
        return seed;
    }

    public static double uniforme()
    {
        return random.nextDouble();
    }

    public static int uniforme(int n)
    {
        if(n == 0)
        {
            throw new IllegalArgumentException("Parametro debe ser positivo");
        }
        return random.nextInt(n);
    }

    public static void shuffle(Object[] a) {
        if (a == null) throw new NullPointerException("argument array is null");
        int n = a.length;
        for (int i = 0; i < n; i++) {
            int r = i + uniforme(n-i);     // between i and n-1
            Object temp = a[i];
            a[i] = a[r];
            a[r] = temp;
        }
    }

    public static void main(String[] args)
    {
        int n = 5;
        System.out.println("seed: " + StdRandom.getSeed());
        String[] a = "A B C D E F".split(" ");
        for(int i = 0; i < n; i++)
        {
            System.out.printf("%2d "  , uniforme(100));
            StdRandom.shuffle(a);
            for (String s : a)
                System.out.print(s);
            System.out.println();
        }

    }
}

7
задан 03.02.2016, 12:00
4 ответа

Согласно которому я вижу в консоли, твой класс должен выглядеть приблизительно таким:

package fmw.java.com.ceva.algorithms;

//sentencias import, si es que hay...

public class StdRandom {
    //contenido de la clase...
    public static void main(String[] args) {
        //contenido del método main...
    }
}

И ты находишь себя в следующем маршруте:

C:\Users\barcvilla\Documents\NetBeansProjects\CevaFmw\build\classes\fmw\java\com\ceva\algorithms

Выполнив команду dir он занесет в список тебе файлы, из-за чего мы находим составленного StdRandom.class

Когда ты выполняешь класс уже составленный Java, ты должен быть в маршруте, где ты смог находить в класс используя Ваше полное имя. Полное имя класса:

<nombre del paquete> + <nombre de la clase>

Для этого случая, он был бы: fmw.java.com.ceva.algorithms.StdRandom

Тогда, чтобы выполнять этот класс:

  1. Ты был бы должен помещаться по крайней мере над папкой com. Это, с твоей консоли, в папке C:\Users\barcvilla\Documents\NetBeansProjects\CevaFmw\build\classes\
  2. Выполнять команду java <nombre completo de clase>. Для того, чтобы предыдущий функционировал, может быть, было необходимо добавлять classpath или место, где находятся классы. Для эффекта этой сцены, она была бы той же папкой, или же .

В командах:

> cd C:\Users\barcvilla\Documents\NetBeansProjects\CevaFmw\build\classes\
> java -cp . fmw.java.com.ceva.algorithms.StdRandom

Это, понимая, что нет такой никакой внешней зависимости как добавочные книжные магазины, которые должны бы быть добавленными к classpath.

4
ответ дан 24.11.2019, 14:55

Ну, юноша спросил: porqué не моги выполнять класс?

Упоминать о том, что я скопировал класс и изменил имя пакета (из-за copyright автора ahahah)

Ok. Мы будем обобщать и объяснять porqué. Когда он занимается с IDE's, одна из вещей, что IDE работает из-за нас, - тема classpath, что кратко является местом, откуда начинаются поиски классов, которые могли бы нуждаться в нашем классе в вопросе, а именно; Ваши зависимости (если у него есть они).

Для этого особенного случая у нас нет как таковой зависимости, у нас есть один import java.util.Random; но это составляет часть JSE, так что нет проблемы.

Проблема здесь - решение package. Определив твой класс в пакете, это включает настройки classpath, что, поработав с Netbeans; они были приняты им.

Поскольку он занялся в IDE, структуре каталогов и решения package они будут являться правильными, в случае, если это не будет IDE и мы это работаем в руку, нужно убеждаться в этом.

Netbeans находится составленные в/build/classes; Затмение размещает их в target/classes. Тогда возможно, что ты хочешь использовать составленного или вновь составить. Давайте предполагать, что мы это составляем снова, тогда, мы будем иметь .java и .class сторона в сторону.

Если пробует выполнять класс просто с java StdRamdon брошенная ошибка будет следующей:

Exception in thread "main" java.lang.NoClassDefFoundError: StdRandom (wrong name: com/java/edu/ropher/algorithms/StdRandom)

Porqué?

Потому что наш класс не называется StdRamdom, он называется com.java.edu.ropher.algorithms.StdRandom, что является тем, что мы называем qualified name

Тогда, давайте выполнять ее с Вашим полным именем!

java com.java.edu.ropher.algotithms.StdRandom

Но также vá, сейчас он не говорит это нам

Error: no se ha encontrado o cargado la clase principal com.java.edu.ropher.algotithms.StdRandom

Porqué?

Потому что, действительно JVM не знает, где находится наш класс, он нуждается в classpath, чтобы мочь помещать ее, но: porqué? потому что мы определили наш класс в пакете. Это не того, чтобы сделать раньше, все было бы волшебником.

Но хороший, тогда давайте делать ему с classpath

java -classpath D:\ROSPENA\Escritorio\Test com.java.edu.ropher.algorithms.StdRandom

И Voilaaa!!

seed: 1454604765916
99 DAEFCB
47 AECDFB
66 ADEFBC
13 ECAFDB
62 CEBAFD

Update

Может быть мне осталось упоминать об этом: потому что classpath, который я использовал, D:\ROSPENA\Escritorio\Test. Потому что Test это папка корень, который содержит каталоги пакета (и она помещена на моем Рабочем столе)

Test->com->java->edu->ropher->algorithms

и он состоит в том, чтобы уезжать оттуда, откуда он должен инициализировать поиски компонентов.

То, чего нам не хватало, так это classpath, но не только это... уже мы знаем porqué

Приветствие и я надеюсь, что поняли.

9
ответ дан 24.11.2019, 14:55
  • 1
    Большое спасибо Rosendo, такой просвет как вода. –  harpazo 04.02.2016, 19:37
  • 2
    Всегда в команду, привет! –  Rosendo Ropher 04.02.2016, 19:38

Попробуй определять область имен в команде (А именно "fully qualified name")

java packageName.StdRandom

Проверяет также, что метод Main содержит соответствующую подпись (args)

public static void main(String[] args)
1
ответ дан 24.11.2019, 14:55
  • 1
    я пробую следующее преподавание; java fmw.java.com.ceva.algorithms. StdRandom бросает в меня ошибку не находился или загрузил главный класс –  harpazo 03.02.2016, 00:08
  • 2
    Ты можешь porfavor включать класс в вопрос, если только он не будет содержать метод Main –  The One 03.02.2016, 00:14
  • 3
    разместившись в маршруте C:\Users\barcvilla\Documents\NetBeansProjects\CevaFmw\build\classes и выполнив с там класс, только что функция и # 243;. Спасибо за Ваше время и помощь. –  harpazo 03.02.2016, 21:37

поскольку это пакет, который содержит класс ты, должно быть, выполняешь .class с адреса назад, откуда начинается маршрут пакета в этом случае, можешь выполнять команду java Clase в адресе:

C:\Users\barcvilla\Documents\NetBeansProyects\CevaFmw\build\clases> java fmw\java\com\ceva\algorithms\ StdRandom;

это, если ты не умеешь манипулировать командой-cp, чтобы предотвращать этот тип ситуаций, управления классов в различных папках, как он делает это NetBeans. В самом деле ошибка это помечает как будто не был составлен .java, она поэтому

2
ответ дан 24.11.2019, 14:55