Как создать JAVA-приложение, которое может быть запущено щелчком?

Я хотел бы иметь JAVA-приложение, которое может быть легко запущено.

До сих пор мне удалось создать файл банки, но я еще не вижу преимуществ. Прежде чем я запущу свое приложение "java HelloWorldSwing", и теперь я использую "Java - банка HelloWorldSwing.jar" (который еще более сложен, чем предыдущая команда и, насколько я понял, использование файла банки требует присутствия *.mf файла в том же каталоге).

Я хотел бы иметь одну из этих двух следующих ситуаций:

  1. Всего один единственный файл, который может быть скопирован в другую операционную систему и что проект может быть запущен только, нажимает на этот файл в файловом браузере (в данный момент, если нажимают на мой файл банки, Ubuntu начинает извлекать архив (потому что банка является архивом, я знаю)).

  2. Создайте пиктограмму, которая может быть помещена на рабочий стол и нажатие, которое инициирует мою программу Java.

9
задан Qantas 94 Heavy 1 May 2014 в 10:34
поделиться

8 ответов

Создание исполняемого файла без зависимостей относительно легко. Вам просто нужно указать в MANIFEST основной класс для использования. Затем его можно запустить с помощью java -jar ExecutableJar.jar , но большинство ОС в этом случае поддерживают двойной щелчок.

Создание jar-файла , который зависит от другого исполняемого файла jar , является более сложной задачей. Вы можете указать путь к классу в МАНИФЕСТЕ , но это все равно означает, что вам нужно скопировать более одного jar-файла для распространения приложения. Другой способ - «упаковать» зависимую банку в основную.

Вы можете сделать все это с помощью maven и maven-assembly-plugin . Используйте предварительно сконфигурированный дескриптор jar-with-dependencies .

<configuration>
     <descriptorRefs>
             <descriptorRef>jar-with-dependencies</descriptorRef>
     </descriptorRefs>
</configuration>

Основной класс можно указать примерно так:

<archive>
     <manifest>
        <mainClass>org.company.MyClass</mainClass>
     </manifest>
 </archive>

РЕДАКТИРОВАТЬ : Полный pom.xml можно найти в этом вопросе .

9
ответ дан 4 December 2019 в 10:32
поделиться

Вот несколько ссылок, которые могут помочь вам ..

JSmooth - это исполняемая оболочка Java. Он создает собственные средства запуска Windows

http://jsmooth.sourceforge.net/

Межплатформенная исполняемая оболочка Java

http://launch4j.sourceforge.net/


http://www.captain.at/programming/java/executable-java-application.php
2
ответ дан 4 December 2019 в 10:32
поделиться

Помимо философии ООП, описанной в других ответах, я думаю, что основное использование абстрактного класса - это своего рода скелет.

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

-121--2471814-

Вы можете указать полный путь. То есть

LIBS += ../datelib/bin/libdatelib_release.so.1.0.0

Однако я бы рекомендовал вам сделать то, что предложили bmargulies: создать symolic ссылку и добавить -ldatelib_release

-121--4716268-

Можно создать исполняемый jar-файл, как описано ниже:

http://csdl.ics.hawaii.edu/~johnson/613f99/modules/04/jar-files.html

Затем пользователи могут щелкнуть его в браузере файлов и запустить основной класс, если это разрешено ОС и настройками безопасности пользователя.

0
ответ дан 4 December 2019 в 10:32
поделиться

Мне очень нравится, как maven создает их: http://maven.apache.org/shared/maven-archiver/examples/classpath.html#Make

3
ответ дан 4 December 2019 в 10:32
поделиться

Launch4J позволяет сделать JAR-файл доступным для запуска на многих платформах.

2
ответ дан 4 December 2019 в 10:32
поделиться

Он называется WebStart ,

Однако он не полностью соответствует вашему описанию. Он не обеспечивает самоупаковывающееся решение, которое должно существовать.

PS. Я лично считаю, что исполняемый файл jar - это шутка, вы не можете контролировать vmargs, не можете иметь хороший значок, и вы даже не можете знать, что он исполняемый, пока его не распакуют и не попытаются выполнить.

2
ответ дан 4 December 2019 в 10:32
поделиться

Если вам нужна простая функциональность, вы можете использовать адаптер Microsoft Loopback Adapter. Чтобы установить его, используйте средство devcon. Вот некоторая информация об этом http://support.microsoft.com/kb/311272 . devcon -r install% WINDIR %\Inf\Netloop.inf * MSLOOP После этого можно использовать WMI-запрос с C # для получения нового имени подключения, а затем netsh для его настройки (т. е. netsh int ip set address name = "Подключение по локальной сети 2" static 192.168.0.3 255.0.0.0)

-121--2856383-

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

public class Fuel
{
    public Fuel()
    {
    }
}

public class Diesel: Fuel
{
}

public class Car<T> where T: Fuel
{
    public Car()
    {
    }

    public void FillTank(T fuel)
    {
    }
}

public class DieselCar: Car<Diesel>
{
}

Сделал бы трюк, например

var car = new DieselCar();
car.FillTank(/* would expect Diesel fuel only */);

По сути, то, что вы делаете здесь, это позволяет автомобиль иметь определенные типы топлива. Он также позволяет создать автомобиль, который бы поддерживал любой тип Fuel (шанс был бы прекрасной вещью!). Тем не менее, в вашем случае, ChargingCar, вы просто извлекаете класс из автомобиля и ограничиваете его использованием только дизельного топлива.

-121--1520919-

Вы должны создать исполняемую банку с упоминанием вашего основного класса (т.е. общедоступного класса с основным () методом в нем) в файле манифеста банка в качестве главного класса. Так что когда prople дважды щелкните его или введите: jar "your jar name" в командной консоли, то они получат его выполнено.

0
ответ дан 4 December 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: