Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2018, 00:13   #1
ICaxapI
Новичок
Джуниор
 
Регистрация: 25.03.2018
Сообщений: 5
По умолчанию Совершенно БАНАльНая ошибка Manifest

Здравствуйте, использую java уже давно, но вот с таким встречаюсь впервые.
Проблема тривиальная до безобразия - не запускается jar файл с помощью команды "java -jar mt.jar", выдаёт ошибку "error: could not find or load main class ru.exsoft.turret.Gui".
Казалось бы, проблема очевидна как и её решение - неверный manifest. Но всё не так просто, как кажется на первый взгляд.
Дело в том, что программа тестилась на пк с виндой, а работать будет на bananapi m2-b, на которой стоит ubuntu.
На винде всё замечательно запускается без пререканий, и напрямую, и через bat'ник, но устройство с ubuntu просто не хочет запускать точно той же самой командой, выдавая ошибку выше. Не помогает даже команда "java -cp mt.jar ru.exsoft.turret.Gui", ошибка та-же.

Содержания файла manifest и класс Gui прилагаю.

P.s. насчёт платформозависимых библиотек не беспокойтесь, всё там верно, ругается именно на то, что не может найти класс...
Java на ubuntu стоит, права на исполнение у файла есть, сижу под рутом
P.p.s. внутри jar'ника путь соблюдён.
P.p.p.s распаковал jar-ник в корень папки приложения и пытался запустить с помощью java ru.exsoft.turret.Gui - выдавало ту-же ошибку ;(

Код:
Manifest-Version: 1.0
Class-Path: .\jarlib\jmf.jar .\jarlib\customizer.jar .\jarlib\opencv-3
00.jar .\jarlib\mediaplayer.jar .\jarlib\multiplayer.jar .\jarlib\cli
ng-core-2.1.1.jar .\jarlib\cling-core-2.1.1-sources.jar .\jarlib\clin
g-support-2.1.1.jar .\jarlib\seamless-http-1.1.1.jar .\jarlib\seamles
s-util-1.1.1.jar .\lib\opencv_java300.dll .\lib\opencv_java300x86.dll
.\lib\libopencv_java341.so
Main-Class: ru.exsoft.turret.Gui
Код:
package ru.exsoft.turret;
 
import java.net.URL;
import javafx.fxml.FXMLLoader;
import javafx.scene.Scene;
import javafx.scene.layout.AnchorPane;
import javafx.stage.Stage;
 
public class Gui extends javafx.application.Application
{
  private static Gui instance;
  
  public Gui() {}
  
  public static void main(String[] args)
  {
    launch(args);
  }
  
  public void start(Stage primaryStage) throws java.io.IOException
  {
    instance = this;
    primaryStage.setTitle("MovingDetector");
    primaryStage.setResizable(false);
    FXMLLoader loader = new FXMLLoader();
    AnchorPane root = (AnchorPane)loader.load(getClass().getResource("general.fxml").openStream());
    Scene scene = new Scene(root);
    primaryStage.setScene(scene);
    primaryStage.show();
    primaryStage.setOnCloseRequest(new Gui.1(this));
  }
}

Последний раз редактировалось Alex11223; 25.03.2018 в 00:16.
ICaxapI вне форума Ответить с цитированием
Старый 25.03.2018, 02:06   #2
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

а обратный слеш виндовский вас не смущает? "\", в юникс системах это тупо не верный символ. Нада "/".
alexzk вне форума Ответить с цитированием
Старый 25.03.2018, 08:24   #3
ICaxapI
Новичок
Джуниор
 
Регистрация: 25.03.2018
Сообщений: 5
По умолчанию

Спасибо за замечание, исправил манифест, но результата это всё ровно не дало
Повторюсь, что команда даже с явным указанием пакета и имени класса java -cp "mt.jar" ru.exsoft.turret.Gui даёт всё ту-же ошибку Error: Could not find or load main class ru.exsoft.turret.Gui

Текущий манифест:
Код:
Manifest-Version: 1.0
Class-Path: ./ . ./jarlib/jmf.jar ./jarlib/customizer.jar ./jarlib/opencv-300.jar ./jarlib/mediaplayer.jar ./jarlib/multiplayer.jar ./jarlib/cling-core-2.1.1.jar ./jarlib/cling-core-2.1.1-sources.jar ./jarlib/cling-support-2.1.1.jar ./jarlib/seamless-http-1.1.1.jar ./jarlib/seamless-util-1.1.1.jar ./lib/opencv_java300.dll ./lib/opencv_java300x86.dll
Main-Class: ru.exsoft.turret.Gui
ICaxapI вне форума Ответить с цитированием
Старый 25.03.2018, 09:02   #4
ICaxapI
Новичок
Джуниор
 
Регистрация: 25.03.2018
Сообщений: 5
По умолчанию

Проблему решил очень извращённым способом -
Создал класс Main

Код:
package ru.exsoft.turret;

public class Main {
    public static void main(String[] args) {
        Gui.main(args);
    }
}
И в манифесте изменил Main-class на ru.exsoft.turret.Main

Остался только 1 вопрос - это что вообще было?) Почему с классом Gui напрямую - не работает, а через подобный костыль - пожалуйста?
ICaxapI вне форума Ответить с цитированием
Старый 25.03.2018, 09:38   #5
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

м.б. это ?
Код:
private static Gui instance;
Для загрузки класса, нужен уже загруженный класс...
alexzk вне форума Ответить с цитированием
Старый 25.03.2018, 11:24   #6
ICaxapI
Новичок
Джуниор
 
Регистрация: 25.03.2018
Сообщений: 5
По умолчанию

Дык ведь это пустая ссылка, ей объект присваивается уже дальше по коду, при выполнении start(), javaFX при инициализации создаёт экземпляр Gui, а я в start() получаю его, чтоб не потерять).
Причём в костыльном Main я вызываю Gui.main(args); , что должно было происходить при запуске. Что и происходило при запуске, но в окнах, а пингвин решил поломаться)
ICaxapI вне форума Ответить с цитированием
Старый 26.03.2018, 08:27   #7
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от ICaxapI Посмотреть сообщение
Дык ведь это пустая ссылка, ей объект присваивается уже дальше по коду, при выполнении start(), javaFX при инициализации создаёт экземпляр Gui, а я в start() получаю его, чтоб не потерять).
Причём в костыльном Main я вызываю Gui.main(args); , что должно было происходить при запуске. Что и происходило при запуске, но в окнах, а пингвин решил поломаться)
Вобщето нет. Там ссылка на самого себя, т.е. зацикленность описания. В пингвине м.б. другой загручик / предкомпилятор - не смог цикл разрешить. Если вам интересно, попробуйте убрать ее в оригинале и посмотреть че будет, и поймем прав ли я

При загрузке класса мейн, нужно уже иметь класс мейн, чтобы создать поле-ссылку. А т.к. он еще и первым грузится - это предельный случай, м.б. баги. Баги обычно и сидят в предельных случаях.
alexzk вне форума Ответить с цитированием
Старый 27.03.2018, 11:56   #8
ICaxapI
Новичок
Джуниор
 
Регистрация: 25.03.2018
Сообщений: 5
По умолчанию

Цитата:
Сообщение от alexzk Посмотреть сообщение
Вобщето нет. Там ссылка на самого себя, т.е. зацикленность описания. В пингвине м.б. другой загручик / предкомпилятор - не смог цикл разрешить. Если вам интересно, попробуйте убрать ее в оригинале и посмотреть че будет, и поймем прав ли я

При загрузке класса мейн, нужно уже иметь класс мейн, чтобы создать поле-ссылку. А т.к. он еще и первым грузится - это предельный случай, м.б. баги. Баги обычно и сидят в предельных случаях.
Вы правы, спасибо, убрал и всё заработало. Это, выходит, баг OpenJDK? Может написать им об ошибке? Или это всё-же я виноват и так делать нельзя?)
Как же тогда реализовать синглтон в главном классе, если нельзя вот такое делать?)

Эта пустая ссылка была заготовкой для синглтона, если что.
ICaxapI вне форума Ответить с цитированием
Старый 27.03.2018, 23:26   #9
alexzk
Форумчанин
 
Регистрация: 12.04.2017
Сообщений: 889
По умолчанию

Цитата:
Сообщение от ICaxapI Посмотреть сообщение
Вы правы, спасибо, убрал и всё заработало. Это, выходит, баг OpenJDK? Может написать им об ошибке? Или это всё-же я виноват и так делать нельзя?)
Как же тогда реализовать синглтон в главном классе, если нельзя вот такое делать?)

Эта пустая ссылка была заготовкой для синглтона, если что.
ну как, сделайте Object instance

Вообще синглтоны в яве плохая идея. В вашем случае норм, но если писать их в библиотеки, а потом такую либу грузануть в андроид - будет беда. Там ВМ не перезапускается при закрытии и все статики остаются.

Насчет бага хз, попробуйте написать им. Я пользую оракловскую.
alexzk вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Да, задача банальная, но в программировании я не мастак. Shamaninoff Помощь студентам 1 06.12.2017 23:38
Компоненнт XP Manifest Ericnex Компоненты Delphi 6 11.09.2012 12:26
Банальная ошибка линковки prouser Общие вопросы C/C++ 2 24.07.2011 04:22
manifest Афанасий[vedma] Компоненты Delphi 4 15.07.2011 09:37
Vista manifest? D@rk M@k Компоненты Delphi 2 21.01.2008 11:37