[英]Bridj no longer working for Windows taskbar loading
我一直在使用代碼使我的 Java 應用程序的任務欄圖標具有Windows 7+
應用程序原生的加載欄功能。 我使用的代碼如下:
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;
}
}
我使用的maven
依賴項是:
<!-- 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>
但是,我收到以下錯誤:
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)
請注意,我也嘗試了較舊的JNA
版本,例如4.1.0
,但它產生了相同的錯誤。 究竟是什么壞了,如何修復?
不知何故,我通過在這一行的評論錯過了示例文件中正確的解決方案: https : //github.com/nativelibs4java/BridJ/blob/master/src/main/demos/TaskbarListDemo.java#L99
用getComponentID()
替換getNativePeerHandle()
調用就成功了。
雖然可能性很小,但我建議在您的項目中添加 'jawt' dll 文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.