JNA beep() 找不到符号?
JNA beep() cannot find symbol?
在下面的代码中,我遇到了一个错误,但不知何故我无法找到修复它的信息。如有任何误会,敬请谅解。
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
// JNA infrastructure import libs.Kernel32;
// Proxy interface for kernel32.dll
public interface JnaTests extends Library {
public boolean Beep(int FREQUENCY , int DURATION );
static Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
static void toMorseCode(String letter) throws Exception {
for (byte b : letter.getBytes()) {
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
Thread.sleep(50);
}
}
public static void main(String[] args) throws Exception {
String helloWorld[][] = { {"....", ".", ".-..", ".-..", "---"}, {".--", "---", ".-.", ".-..", "-.."}};
for (String word[] : helloWorld) {
for (String letter : word) {
toMorseCode(letter);
Thread.sleep(150);
}
Thread.sleep(350);
}
}
}
您没有为 Kernel32
class 使用正确的名称。您已使用此行导入它:
import com.sun.jna.platform.win32.Kernel32;
但是您试图以错误的名称使用它:
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
注意大小写。
值得注意的是,com.sun
层次结构中的任何包在使用时本质上都是不安全的 - 它们旨在完全在 Java 内部使用,并不意味着在您的程序中使用.它们可以在没有警告或向后兼容性的情况下更改,并且可能具有非常具体的未记录要求,使您无法使用它们。
哔哔声,具体来说,是一个非常硬件和平台特定的东西,你不能保证这段代码甚至可以在不同的 Windows 系统上工作,更不用说其他 OS的。你最好播放一个实际的声音文件,因为它在任何地方都可以工作并给你一致的结果。请参阅 Java equivalent of C# system.beep? 以更深入地讨论您所追求的目标。
感谢您的回答。
最后我发现在一个单独的文件中应该有一个接口(Kernel32)。
社区文档中提到了这一点,但是一些 .dll 也可以在没有接口的情况下工作,例如User32.dll.
</p>
<pre><code>package com.sun.jna.platform;
import com.sun.jna.Library;
//@author windows-System
public class win32 {
public interface Kernel32 extends Library {
boolean Beep(int frequency, int duration);
// ... (lines deleted for clarity) ... }
}
}
主文件
</p>
<pre><code>import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
// JNA infrastructure import libs.Kernel32;
// Proxy interface for kernel32.dll
public class JnaTests {
private static Kernel32 kernel32 = (Kernel32)
Native.loadLibrary ("kernel32", Kernel32.class);
private static void toMorseCode(String letter) throws Exception {
for (byte b : letter.getBytes()) {
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
Thread.sleep(50);
}
}
public static void main(String[] args) throws Exception {
String helloWorld[][] = { {"....", ".", ".-..", ".-..", "---"},
{".--", "---", ".-.", ".-..", "-.."}};
for (String word[] : helloWorld) {
for (String letter : word) {
toMorseCode(letter);
Thread.sleep(150);
}
Thread.sleep(350);
}
}
}
在下面的代码中,我遇到了一个错误,但不知何故我无法找到修复它的信息。如有任何误会,敬请谅解。
import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
// JNA infrastructure import libs.Kernel32;
// Proxy interface for kernel32.dll
public interface JnaTests extends Library {
public boolean Beep(int FREQUENCY , int DURATION );
static Kernel32 kernel32 = (Kernel32) Native.loadLibrary("kernel32", Kernel32.class);
static void toMorseCode(String letter) throws Exception {
for (byte b : letter.getBytes()) {
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
Thread.sleep(50);
}
}
public static void main(String[] args) throws Exception {
String helloWorld[][] = { {"....", ".", ".-..", ".-..", "---"}, {".--", "---", ".-.", ".-..", "-.."}};
for (String word[] : helloWorld) {
for (String letter : word) {
toMorseCode(letter);
Thread.sleep(150);
}
Thread.sleep(350);
}
}
}
您没有为 Kernel32
class 使用正确的名称。您已使用此行导入它:
import com.sun.jna.platform.win32.Kernel32;
但是您试图以错误的名称使用它:
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
注意大小写。
值得注意的是,com.sun
层次结构中的任何包在使用时本质上都是不安全的 - 它们旨在完全在 Java 内部使用,并不意味着在您的程序中使用.它们可以在没有警告或向后兼容性的情况下更改,并且可能具有非常具体的未记录要求,使您无法使用它们。
哔哔声,具体来说,是一个非常硬件和平台特定的东西,你不能保证这段代码甚至可以在不同的 Windows 系统上工作,更不用说其他 OS的。你最好播放一个实际的声音文件,因为它在任何地方都可以工作并给你一致的结果。请参阅 Java equivalent of C# system.beep? 以更深入地讨论您所追求的目标。
感谢您的回答。
最后我发现在一个单独的文件中应该有一个接口(Kernel32)。
社区文档中提到了这一点,但是一些 .dll 也可以在没有接口的情况下工作,例如User32.dll.
</p>
<pre><code>package com.sun.jna.platform;
import com.sun.jna.Library;
//@author windows-System
public class win32 {
public interface Kernel32 extends Library {
boolean Beep(int frequency, int duration);
// ... (lines deleted for clarity) ... }
}
}
主文件
</p>
<pre><code>import com.sun.jna.Library;
import com.sun.jna.Native;
import com.sun.jna.platform.win32.Kernel32;
// JNA infrastructure import libs.Kernel32;
// Proxy interface for kernel32.dll
public class JnaTests {
private static Kernel32 kernel32 = (Kernel32)
Native.loadLibrary ("kernel32", Kernel32.class);
private static void toMorseCode(String letter) throws Exception {
for (byte b : letter.getBytes()) {
kernel32.Beep(1200, ((b == '.') ? 50 : 150));
Thread.sleep(50);
}
}
public static void main(String[] args) throws Exception {
String helloWorld[][] = { {"....", ".", ".-..", ".-..", "---"},
{".--", "---", ".-.", ".-..", "-.."}};
for (String word[] : helloWorld) {
for (String letter : word) {
toMorseCode(letter);
Thread.sleep(150);
}
Thread.sleep(350);
}
} }