Пакет javazoom работает в основной программе, но не работает в подпрограмме (.NoClassDefFoundError: javazoom/jl/decoder/ ⇐ JAVA
-
Гость
Пакет javazoom работает в основной программе, но не работает в подпрограмме (.NoClassDefFoundError: javazoom/jl/decoder/
Я создаю MP3-плеер на языке Java, и написанный мною сценарий может воспроизводить mp3-файл в основном файле, но когда я помещаю тот же код в подпрограмму в другом файле Java, происходит сбой.
Вот сценарий, когда он находится в основном режиме (StandAlone.java):
import javazoom.jl.decoder.Bitstream; импортировать javazoom.jl.decoder.JavaLayerException; импортировать javazoom.jl.player.advanced.AdvancedPlayer; импортировать java.io.FileInputStream; импортировать java.io.IOException; общественный класс Stand_Alone { public static void main(String[] args) { Строка mp3FilePath = "песня.mp3"; попробуйте (FileInputStream fileInputStream = новый FileInputStream (mp3FilePath)) { Игрок AdvancedPlayer = новый AdvancedPlayer(fileInputStream); игрок.играть(); } catch (JavaLayerException | IOException e) { е.printStackTrace(); } } } Вот код основной и подпрограммы (Main.java и SongPlayer.java):
публичный класс Main { public static void main(String[] args) { SongPlayer.load(); } } import javazoom.jl.decoder.Bitstream; импортировать javazoom.jl.decoder.JavaLayerException; импортировать javazoom.jl.player.advanced.AdvancedPlayer; импортировать java.io.FileInputStream; импортировать java.io.IOException; публичный класс SongPlayer { общественная статическая недействительная нагрузка () { Строка mp3FilePath = "песня.mp3"; System.out.println(mp3FilePath); попробуйте (FileInputStream fileInputStream = новый FileInputStream (mp3FilePath)) { Игрок AdvancedPlayer = новый AdvancedPlayer(fileInputStream); игрок.играть(); } catch (JavaLayerException | IOException e) { е.printStackTrace(); } } } Я использую Windows, запускаю ее в командной строке с помощью команд:
javac -cp javazoom_1.0.1.jar SongPlayer.java Main.java Java Главная Два сценария, песня и jar-файл javazoom находятся в одной папке.
Результат выполнения команды:
Исключение в потоке «main» java.lang.NoClassDefFoundError: javazoom/jl/decoder/JavaLayerException в Main.main(Main.java:4) Вызвано: java.lang.ClassNotFoundException: javazoom.jl.decoder.JavaLayerException в java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) в java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) в java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 более Вопрос в том, почему Java не может видеть пакет javazoom, когда команды запускаются из подпрограммы, тогда как в автономном случае он может видеть его из main.
Как заставить Java видеть javazoom из подпрограммы?
Пожалуйста, помогите мне, это сводит меня с ума и останавливает мой прогресс. Я мог бы поместить все в один большой Java-файл, но это беспорядочно и запутанно.
Я создаю MP3-плеер на языке Java, и написанный мною сценарий может воспроизводить mp3-файл в основном файле, но когда я помещаю тот же код в подпрограмму в другом файле Java, происходит сбой.
Вот сценарий, когда он находится в основном режиме (StandAlone.java):
import javazoom.jl.decoder.Bitstream; импортировать javazoom.jl.decoder.JavaLayerException; импортировать javazoom.jl.player.advanced.AdvancedPlayer; импортировать java.io.FileInputStream; импортировать java.io.IOException; общественный класс Stand_Alone { public static void main(String[] args) { Строка mp3FilePath = "песня.mp3"; попробуйте (FileInputStream fileInputStream = новый FileInputStream (mp3FilePath)) { Игрок AdvancedPlayer = новый AdvancedPlayer(fileInputStream); игрок.играть(); } catch (JavaLayerException | IOException e) { е.printStackTrace(); } } } Вот код основной и подпрограммы (Main.java и SongPlayer.java):
публичный класс Main { public static void main(String[] args) { SongPlayer.load(); } } import javazoom.jl.decoder.Bitstream; импортировать javazoom.jl.decoder.JavaLayerException; импортировать javazoom.jl.player.advanced.AdvancedPlayer; импортировать java.io.FileInputStream; импортировать java.io.IOException; публичный класс SongPlayer { общественная статическая недействительная нагрузка () { Строка mp3FilePath = "песня.mp3"; System.out.println(mp3FilePath); попробуйте (FileInputStream fileInputStream = новый FileInputStream (mp3FilePath)) { Игрок AdvancedPlayer = новый AdvancedPlayer(fileInputStream); игрок.играть(); } catch (JavaLayerException | IOException e) { е.printStackTrace(); } } } Я использую Windows, запускаю ее в командной строке с помощью команд:
javac -cp javazoom_1.0.1.jar SongPlayer.java Main.java Java Главная Два сценария, песня и jar-файл javazoom находятся в одной папке.
Результат выполнения команды:
Исключение в потоке «main» java.lang.NoClassDefFoundError: javazoom/jl/decoder/JavaLayerException в Main.main(Main.java:4) Вызвано: java.lang.ClassNotFoundException: javazoom.jl.decoder.JavaLayerException в java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641) в java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188) в java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:520) ... 1 более Вопрос в том, почему Java не может видеть пакет javazoom, когда команды запускаются из подпрограммы, тогда как в автономном случае он может видеть его из main.
Как заставить Java видеть javazoom из подпрограммы?
Пожалуйста, помогите мне, это сводит меня с ума и останавливает мой прогресс. Я мог бы поместить все в один большой Java-файл, но это беспорядочно и запутанно.
Мобильная версия