После загрузки вашего тестового проекта я вижу несколько вещей:
- Ваша конфигурация запуска для «MainApp» не использует gradle, но использует управляемый проект Intellij, настроенный для сборки и запуска application.
- MainApp.kt не имеет "основной" функции для запуска Intellij
Я не эксперт по Intellij или gradle, поэтому я не могу объяснить, почему вы может запускаться с помощью gradle без основной функции, но не может этого делать из Intellij. Я ожидаю, что gradle может каким-то образом внедрить основную функцию, которая может выполнять класс приложения JavaFX, определенный вашим MainApp (класс приложения TornadoFX расширяет класс приложения JavaFX).
Чтобы это работало, вы можете либо настроить конфигурацию запуска на используйте gradle или добавьте основную функцию в MyApp.kt и обновите конфигурацию запуска MainApp.
Используйте Gradle для запуска из Intellij
- Щелкните вкладку gradle в правой части Intellij
- Разверните kotlin - конфигурация gradle для задач -> приложение Примечание: вам может потребоваться нажать кнопку «refre sh» в верхнем левом углу панели градиента, чтобы обновить sh список доступных задач.
- Дважды щелкните «запустить» и запустить задачу gradle. будет выполнено
- Когда вы это сделаете, Intellij автоматически добавит новую конфигурацию «test-project [run]»
Скриншот панели Gradle
Примечание: По-прежнему рекомендуется добавить основную функцию, как описано ниже, и обновить build.gradle.kts, чтобы использовать «MainAppKt». Это даст вам некоторую гибкость при запуске вашего приложения с Java 9+ без необходимости определения модулей (то есть немодульного приложения)
Используйте Intellij для запуска
- Добавьте следующий код в свой MainApp.kt
fun main(args: Array<String>) {
launch<MainApp>(args)
}
Отредактируйте существующую конфигурацию запуска «MainApp» и измените класс Main на «MainAppKt» Нажмите «ОК», чтобы сохранить, и теперь вы можете запустить конфигурацию «MainApp»
Последнее примечание : Если вы используете Java 9+, вам необходимо использовать сборку моментальных снимков TornadoFX, иначе вы столкнетесь с проблемами.
Добавьте репозиторий снимков в раздел репозиториев с помощью
maven("https://oss.sonatype.org/content/repositories/snapshots")
И обновите версию TornadoFX до «2.0.0-SNAPSHOT»
implementation("no.tornado:tornadofx:2.0.0-SNAPSHOT")
Старый ответ
Вам не хватает параметра mainClassName в вашем build.gradle.kts:
application {
mainClassName = "com.example.demo.app.MyApp"
}
Некоторые примечания:
- Если у вас есть основная функция, запускающая ваше приложение, как показано ниже, вам нужно добавить «Kt» к имени основного класса, в котором расположена функция, поскольку kotlin создает новый класс для хранения stati c основная функция для JVM. Например, если бы в файле MyApp.kt у меня была указанная ниже основная функция, мне нужно было бы использовать com.example.demo.app.MyAppKt, чтобы вызвать основную функцию для запуска приложения.
fun main(args: Array<String>) {
launch<MyApp>(args)
}
- Синтаксис для mainClassName различается в зависимости от версии Gradle и языка. Обычно я использую groovy, поэтому мне пришлось искать kts. Текущая версия Gradle 6.4 использует синтаксис, отличный от 6.3. Я предоставил синтаксис для версии 6.3. Я не уверен, когда было внесено изменение, поэтому вам может потребоваться проверить правильный синтаксис для вашей версии gradle.