首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bridj不再适用于Windows任务栏加载

Bridj不再适用于Windows任务栏加载
EN

Stack Overflow用户
提问于 2019-05-13 03:50:04
回答 2查看 89关注 0票数 1

我一直在使用代码使我的Java应用程序的任务栏图标具有Windows 7+应用程序固有的加载栏特性。我使用的代码如下:

代码语言:javascript
复制
import lombok.val;
import org.bridj.Pointer;
import org.bridj.cpp.com.COMRuntime;
import org.bridj.cpp.com.shell.ITaskbarList3;

import java.awt.*;

import static org.apache.commons.lang3.SystemUtils.*;
import static org.bridj.Pointer.pointerToAddress;
import static org.bridj.jawt.JAWTUtils.getNativePeerHandle;

public class WindowsTaskBarProgress
{
    private ITaskbarList3 taskBarList3;
    private Pointer<Integer> pointer;
    private long maximum;

    public WindowsTaskBarProgress(Component component) throws ClassNotFoundException
    {
        if (isSupportedPlatform())
        {
            taskBarList3 = COMRuntime.newInstance(ITaskbarList3.class);
            val nativePeerHandle = getNativePeerHandle(component); // <- The error arises here
            Pointer.Releaser release = pointer -> {
            };

            pointer = pointerToAddress(nativePeerHandle, Integer.class, release);
        }

        this.maximum = 100;
    }

    public void setProgressValue(long value)
    {
        if (isSupportedPlatform())
        {
            taskBarList3.SetProgressValue(pointer, value, maximum);
        }
    }

    public void resetProgress()
    {
        setProgressValue(0);
    }

    /*public void setProgressFlag(ITaskbarList3.TbpFlag flag)
    {
        if (isSupportedPlatform())
        {
            taskBarList3.SetProgressState(pointer, flag);
        }
    }*/

    private static boolean isSupportedPlatform()
    {
        return IS_OS_WINDOWS_7
                || IS_OS_WINDOWS_8
                || IS_OS_WINDOWS_10;
    }

    public void setMaximum(long maximum)
    {
        this.maximum = maximum;
    }
}

可以在here中找到SSCCE

我使用的maven依赖项是:

代码语言:javascript
复制
<!-- Windows 7+ task bar progress bar -->
<dependency>
    <groupId>com.nativelibs4java</groupId>
    <!-- https://github.com/nativelibs4java/BridJ -->
    <artifactId>bridj</artifactId>
    <version>0.7.0</version>
</dependency>
<dependency>
    <!-- https://github.com/java-native-access/jna -->
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>5.3.1</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna-platform</artifactId>
    <version>5.3.1</version>
</dependency>

但是,我得到了以下错误:

代码语言:javascript
复制
java.lang.UnsatisfiedLinkError: org.bridj.jawt.JawtLibrary.JAWT_GetAWT(Lorg/bridj/Pointer;Lorg/bridj/Pointer;)Z
    at org.bridj.jawt.JawtLibrary.JAWT_GetAWT(Native Method)
    at org.bridj.jawt.JAWTUtils.getJAWT(JAWTUtils.java:66)
    at org.bridj.jawt.JAWTUtils.getNativePeerHandle(JAWTUtils.java:129)

请注意,我也尝试了像4.1.0这样的较老的JNA版本,它也产生了相同的错误。到底是什么坏了,该如何修复呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-29 22:54:56

不知何故,我错过了示例文件中正确的解决方案,因为在该行上添加了注释:https://github.com/nativelibs4java/BridJ/blob/master/src/main/demos/TaskbarListDemo.java#L99

getComponentID()替换getNativePeerHandle()调用成功了。

票数 0
EN

Stack Overflow用户

发布于 2019-12-30 19:37:00

虽然概率很低,但我建议在您的项目中添加'jawt‘dll文件。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56102905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档