Это происходит со мной, когда мой контроллер представления первоначально имел .xib-файл, но теперь он создан программно.
Даже несмотря на то, что я удалил файл .xib из этого проекта. Пользователи iPhone / iPad могут содержать файлы .xib для этого диспетчера представлений.
Попытка загрузить файл .xib обычно вызывает этот сбой:
Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<UIViewController 0x18afe0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key welcomeLabel.'
Решение при его создании программно может это:
-(void)loadView {
// Ensure that we don't load an .xib file for this viewcontroller
self.view = [UIView new];
}
Это кажется довольно старым, и на самом деле не стоит усилий, но это может быть и то, что вы ищете: Java exe Maker .
Если вы хотите запустить свое собственное решение, вам захочется взглянуть на JNI и Invocation API , в частности JNI_CreateJavaVM()
, который используется для создания виртуальной машины, найти основной метод GetStaticMethodID()
и вызвать его с помощью CallStaticVoidMethod
.
Это то, что делают внутри java.exe
, javaw.exe
и множество других локальных пусковых установок. Некоторые примеры включают в себя:
Если вы хотите не захотеть интегрировать собственную систему сборки с вашей системой сборки java, то стоит создать статический launcher.exe
, и рассматривать его как статический двоичный блок. Затем во время сборки java измените двоичный блок с помощью java, чтобы обновить VERSIONINFO , значок и заставку. Пример такого подхода можно увидеть в IntelliJ LauncherGeneratorMain.java
Если вы можете себе это позволить, JSmooth , похоже, делает то, что вам нужно. Последнее выпущено в 2007 году. Заметка о ее лицензии, взятой из самого приложения:
Сгенерированный исполняемый файл (пусковые установки, созданные JSmooth) находятся под LGPL с «исключением во время выполнения», аналогичным исключению лицензии gcc: не требуется, чтобы вы распространяли с ним исходный код, и что вы публикуете уведомление о jsmooth.
При использовании JSmooth существует раздел с надписью «Скелет», который позволяет вам выбрать некоторые предварительные Определенные параметры. Один из них - «Windowed Wrapper», который подходит для приложений GUI, описанных ниже:
Этот скелет обертывает приложения GUI.
- Нет консольных входов / выходов отображается
- Если виртуальная машина Java не найдена, она может отображать настраиваемый URL (обычно на странице загрузки java).
Аргументы могут быть переданы в (либо использовать механизм аргументов JSmooth по умолчанию, либо создать ярлык с аргументами).
Важным в этом скелете является проверка опции «Запустить java-приложение в процессе exe», которое приводит к запуску JVM в том же процессе, что и exe wrapper. Это означает, что в диспетчере задач Windows отображается только exe, в отличие от exe и java-процесса.
Альтернативой является создание собственной оболочки. См. этот справочник Oracle о том, как вызвать JVM из собственного приложения.
Я сделал аналогичные вещи с WinRun4J , насколько я помню, он может быть коммерчески использован, потому что он лицензирован CPL. Проверено это сегодня: настройки имя процесса все еще работает (изначально это делалось на XP) с Windows 7.
Согласно веб-сайту, вы просто создаете ini-файл, который сообщает WinRun4J, что запускать:
main.class=org.something.MyMainClass
classpath.1=*.jar
(есть еще много параметров, вы можете установить, где JRE можно найти и многое другое)
На втором шаге вы копируете файл winrun4j.exe в то, что подходит вашему приложению:
copy winrun4j.exe yourapplication.exe
(Существует версия для Windows x64 тоже)
Затем у вас есть RCEDIT (поставляется с WinRun4j), добавьте ini в exe:
rcedit /N yourapplication.exe yourapplication.ini