JNA beep()找不到符号?

时间:2016-04-23 19:36:02

标签: java jna beep

在下面的代码中我收到错误,不知怎的,我无法找到解决问题的信息。对不起有任何误解。

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); 
   }
  } 
 }

2 个答案:

答案 0 :(得分:1)

您没有使用Kernel32类的正确名称。您已使用此行导入它:

import com.sun.jna.platform.win32.Kernel32;

但是你试图用错误的名字来使用它:

kernel32.Beep(1200, ((b == '.') ? 50 : 150));

注意大小写。

值得注意的是com.sun层次结构中的任何软件包本质上都不安全使用 - 它们本质上是Java内部的,并不意味着在您的程序中使用。它们可以在没有警告或向后兼容的情况下进行更改,并且可能具有非常具体的无证要求,使您无法使用它们。

特别是,哔哔声是一个特定于硬件和平台的东西,并且您无法保证此代码甚至可以在不同的Windows系统上运行,更不用说其他操作系统了。您最好不要播放实际的声音文件,因为它可以在任何地方使用并为您提供一致的结果。请参阅Java equivalent of C# system.beep?,详细了解您的目标。

答案 1 :(得分:0)

感谢您的回答。

最后我发现在一个单独的文件中应该有一个接口(Kernel32)。

社区文档中提到了这一点,但有些.dll也没有使用Interface,例如User32.dll。

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) ... }   
}

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) ... } }

主文件

}

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); 
}

} }