问题标签 [compose-desktop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
gradle - 撰写桌面项目:如何在不提交的情况下包含 API 密钥(或其他机密)?
在Compose Desktop项目中,我们如何在不提交的情况下管理密钥?
在 Android 项目中,Gradle 具有buildConfigField()
和resValue()
功能。它们将BuildConfig.java
在编译期间生成,我们可以在运行时使用这些值。
例如,在一个 Android 项目中,首先,我们创建两个环境变量 —RELEASE_API_KEY
和STAGING_API_KEY
(它可以是本地计算机,也可以是 CI/CD 环境)。
然后在 build.gradle 文件中我们可以说:
..在 Kotlin 代码中我们可以使用:
Compose Desktop项目中是否有类似的方法,以便:
- 我不必将秘密提交到源存储库?
- 我可以在 CI/CD 环境中轻松配置机密吗?
compose-desktop - 使用“verticalScroll”修饰符时撰写桌面“ClassNotFoundException”
ClassNotFoundException
使用verticalScroll
修饰符时出现错误,使用 LazyColumn 时也出现相同的错误。
我正在使用撰写版本1.0.1
,但它与1.0.0
谁能帮我解决这个问题?
谢谢
kotlin - 如何在 Jetpack Compose 中以便携的方式实现计时器?
我想写一些应用程序,我希望某些事情按计划发生。
每隔几分钟轮询一次 URL 以获取更新似乎是一个相当常见的用例。不过,在这种特殊情况下,我只是想实现一个时钟。
这有效:
但是我必须 import java.util.Timer
,所以它不会是便携式的。
Jetpack Compose 可以做动画,所以它肯定在某个地方有自己的计时器,这意味着应该有一些可移植的方式来做到这一点,但我似乎无法弄清楚。
有没有一种跨平台的方式来为此目的获取计时器?
kotlin - 如何在 IntelliJ-IDEA 中使用 Compose for Desktop 编译 MSI 包?
我正在尝试使用创建 Compose for Desktop 应用程序的 MSI 独立包
./gradlew package
在 IntelliJ-IDEA 终端中,但我总是得到:
任务:createRuntimeImage 失败
我刚刚创建了 IDE 建议的 Compose for Desktop 示例项目(使用“新建项目”向导)并尝试编译它但没有成功。我使用的是 Windows 11,安装了 JDK 17 以及 MinGW。Kotlin 版本是 1.5.31,Compose 版本是 1.0.0。我可以通过右键单击“Main.kt”和“运行”来运行应用程序。尝试打包时的终端输出为:
任务“:createRuntimeImage”执行失败。外部工具执行失败:
- 命令:[C:\Program Files\Java\jdk-17.0.2\bin\jlink.exe, @C:\Users\MyUserName\IdeaProjects\untitled\build\compose\tmp\createRuntimeImage.args.txt]
- 工作目录:[]
- 退出代码:1
- 标准输出日志:C:\Users\MyUserName\IdeaProjects\untitled\build\compose\logs\createRuntimeImage\jlink-2022-02-22-18-50-47-out.txt
- 错误日志:C:\Users\MyUserName\IdeaProjects\untitled\build\compose\logs\createRuntimeImage\jlink-2022-02-22-18-50-47-err.txt
“[...]-err.txt”文件为空,“[...]-out.txt”文件包含:
错误:C:\Users\MyUserName\IdeaProjects
最后,“[...].args.txt”文件包含:
"java.desktop" --add-modules "java.logging" --add-modules "jdk.crypto.ec" --strip-debug --no-header-files --no-man-pages --strip-本机命令 -- 输出 "C:\Users\MyUserName\IdeaProjects\untitled\build\compose\tmp\main\runtime"
我将其运行为:
这是输出:
org.gradle.api.tasks.TaskExecutionException:任务“:createRuntimeImage”执行失败。org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.lambda$executeIfValid$1(ExecuteActionsTaskExecuter.java:188) org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:263) org.gradle。 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:174) 在 org.gradle.api.internal 的 api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:186)。 tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109) 在 org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) 在 org.gradle.api.internal.tasks.execution。解决任务执行模式执行器。
原因:java.lang.IllegalStateException:外部工具执行失败:在 org.jetbrains.compose.desktop.application.internal 的 org.jetbrains.compose.desktop.application.internal.ExternalToolRunner.invoke(ExternalToolRunner.kt:71)。 ExternalToolRunner.invoke$default(ExternalToolRunner.kt:22) at org.jetbrains.compose.desktop.application.tasks.AbstractJvmToolOperationTask.run(AbstractJvmToolOperationTask.kt:70) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(本机方法)在 java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 在 org.gradle 的 java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)。 internal.reflect.JavaMethod.invoke(JavaMethod.java:104) 在 org.gradle.api.internal.project.taskfactory.IncrementalInputsTaskAction。doExecute(IncrementalInputsTaskAction.java:32) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51) at org.gradle.api.internal.project.taskfactory.AbstractIncrementalTaskAction.execute(AbstractIncrementalTaskAction. java:25) at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29) at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$2.run(ExecuteActionsTaskExecuter.java:506 ) 在 org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26) 在 org.gradle.internal.operations 的 org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)。 DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75) 在 org.gradle.internal.operations。DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56) 在 org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:74) 在 org.gradle.internal.operations.UnmanagedBuildOperationWrapper .runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45) 在 org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:74) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:491) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:474) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:106 ) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:249) 在 org.gradle.internal.execution.steps.ExecuteStep.executeInternal(ExecuteStep.java:83) 在 org.gradle .internal.execution.steps.ExecuteStep.access$000(ExecuteStep.java:37) at org.gradle.internal.execution.steps.ExecuteStep$1.call(ExecuteStep.java:50) at org.gradle.internal.execution.steps .ExecuteStep$1.call(ExecuteStep.java:47) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200) at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner. java:195)在 org.gradle 的 org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)。internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java :68) 在 org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79) 在 org.gradle.internal 的 org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62) .operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54) 在 org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79) 在 org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java :47) 在组织。gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:37) 在 org.gradle.internal.execution.steps.RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:68) 在 org.gradle.internal.execution.steps。 RemovePreviousOutputsStep.execute(RemovePreviousOutputsStep.java:38) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:50) at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java: 36) 在 org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:74) 在 org.gradle.internal 的 org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:41) .execution.steps.TimeoutStep.execute(TimeoutStep.java:55) 在 org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:51) 在 org.gradle.internal.execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:54) 在 org.gradle.internal 的 org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:29) .execution.steps.CaptureStateAfterExecutionStep.execute(CaptureStateAfterExecutionStep.java:35) 在 org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:60) 在 org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute (BroadcastChangingOutputsStep.java:27) 在 org.gradle.internal.execution.steps.BuildCacheStep.executeWithoutCache(BuildCacheStep.java:174) 在 org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:74) 在org.gradle.internal 的 org.gradle.internal.execution.steps.BuildCacheStep.execute(BuildCacheStep.java:45)。execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:40) at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:29) at org.gradle.internal.execution.steps.RecordOutputsStep.execute( RecordOutputsStep.java:36) 在 org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:22) 在 org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:99) 在 org .gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:92) 在 org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:52) 在 org.gradle.internal。 execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:36) 在 org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:85) 在 org.gradle。internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:42) 在 org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:37) 在 org.gradle.internal.execution.steps。 legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:27) 在 org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:91) 在 org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep. java:49) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:106) at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:51) at org.gradle .internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:72) 在 org.gradle。internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:46) at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:86) at org.gradle.internal.execution.steps .SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:86) 在 org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:32) 在 org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep .java:38) 在 org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:43) 在 org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:31) 在 org. org.gradle.api.internal 的 gradle.internal.execution.steps.AssignWorkspaceStep.lambda$execute$0(AssignWorkspaceStep.java:40)。tasks.execution.ExecuteActionsTaskExecuter$TaskExecution$2.withWorkspace(ExecuteActionsTaskExecuter.java:284) 在 org.gradle.internal.execution.steps.AssignWorkspaceStep.execute(AssignWorkspaceStep.java:40) 在 org.gradle.internal.execution.steps.AssignWorkspaceStep .execute(AssignWorkspaceStep.java:30) 在 org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:37) 在 org.gradle.internal.execution.steps.IdentityCacheStep.execute(IdentityCacheStep.java:27) ) 在 org.gradle.internal 的 org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:33) 的 org.gradle.internal.execution.steps.IdentifyStep.execute(IdentifyStep.java:44)。 execution.impl.DefaultExecutionEngine$1.execute(DefaultExecutionEngine.java:76) 在 org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter。在 org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter. java:109) at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46) at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:51)在 org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56) 在 org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) .api.internal.tasks.execution.CatchExceptionTaskExecuter。在org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call( EventFiringTaskExecuter.java:55) 在 org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52) 在 org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200 ) 在 org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75) 在 org.gradle.internal.operations 的 org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195) .DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68) 在 org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68) 在 org.gradle.internal.operations.DefaultBuildOperationRunner 的 org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153) .call(DefaultBuildOperationRunner.java:62) at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:79) at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)在 org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:79) 在 org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52) 在 org.gradle.execution.plan .LocalTaskNodeExecutor。在 org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:395) 处执行(LocalTaskNodeExecutor.java:74)在 org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:388) 在 org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:374) 在 org.gradle.execution.plan .DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127) 在 org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191) 在 org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker。executeNextNode(DefaultPlanExecutor.java:182) at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124) at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)在 org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48) 在 org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)运行(ThreadFactoryImpl.java:56)运行(ThreadFactoryImpl.java:56)
我尝试过更改 Kotlin、Compose 和 JDK 版本,但无法解决。尽管我对此进行了很多搜索,但其他解决方案似乎对我不起作用。任何帮助将不胜感激!
windows - 如何更改 Windows PowerShell 通知中的应用程序名称?
我正在使用 jetpack compose 开发一个桌面应用程序,它大量使用 windows toast 通知功能。我使用 PowerShell 脚本通过BurntToast模块推送 toast 通知。通知工作正常,但每次执行时,我都会将 Windows Powershell 视为应用程序名称,而不是任何自定义名称。
PowerShell 通知图像:
如何将名称从 Windows PowerShell 更改为我想要的名称?
kotlin - 使用 java.util.Properties 驱动 Compose 状态
我正在使用Compose for Desktop为我的桌面应用程序设计一个 GUI 。如果应用程序关闭并重新打开,一些 GUI 组件需要保留 — 一些 GUI 组件还需要根据某些状态进行更改。为此,我使用了一个简单的java.util.Properties
对象来存储信息(我已经扩展Properties
为在调用时将其内容存储到文件setProperty
中)。
例如,我希望在更改语言环境时更新 GUI 组件。当用户更改语言环境时,我设置了该属性,类似于:
然后我想要一个ResourceBundle
——由一个状态定义的——更新。我尝试过这样的事情:
GUI 的文本元素使用i18n
对象来获取它们的字符串。
但是,如果我调用launcherState.setProperty("locale", "fr")
,locale
并且i18n
不更新(因此 GUI 不会更新)——我相信他们无论如何都不应该这样做。
所以我的问题是,我怎样才能使launcherState
“可观察”,以便当我对其进行更改时,状态会更新?或者,我应该采取完全不同的方法。
macos - 使用撰写桌面在 MacO 上获取资源目录失败
我从 jetpack compose desktop lib 的演示中复制了代码,但得到了错误的 dir("/")。谁能告诉我有什么问题?谢谢你。
(jetpack compose 桌面库:https ://github.com/JetBrains/compose-jb/blob/master/tutorials/Native_distributions_and_local_execution/README.md )
compose-desktop - 将本机二进制文件添加到 jetpack compose 包
我的 Jetpack Compose Desktop 应用程序依赖于我想包含在 Debian 包中的专有可执行文件。我得到的最接近的是将文件添加为资源,但这不会设置可执行标志。
是否有另一种在 packageDeb 任务中包含文件的方法,可以保留可执行标志?