Hi anh em, tớ có vấn đề cùng anh em nghiên cứu đây 
Thường thì khi chúng ta khởi động máy tính lên sẽ có âm báo tình trạng phần cứng từ cái loa chút xíu trên mainboard, nó rất hữu ích khi chúng ta không cần phải gắn loa vào mới biết vấn đề gì. Tớ viết phần mềm ứng dụng và muốn dùng nó để báo lỗi nhưng tìm trên mạng đa phần là nói về 2 cách sau:
Print the ASCII Bell character to the console
Starting with JDK 1.1, use the beep method in the Toolkit
Hai cách trên dùng đúng thì cũng chỉ có một số main đặc biệt mới dùng được, đa phần là tiếng beep đó phát ra loa thùng.
Sau một vòng lớp trên internet mình cũng tìm được một cách khác là dùng JNI cho chương trình gọi native method trong một file .dll (Tất nhiên là nó chỉ giới hạn là windows rồi).
Trong thư mục đính kèm bạn có thể giải nén ra và chạy file run PlaySound.bat thì sẽ nghe được một giai điệu từ cái loa nho nhỏ trên mainboard.
Vấn đề bắt đầu thực sự là vấn đề khi đưa nó vào chương trình để kết hợp với các class khác.
Tớ đã sử dụng đến chiêu
để load class InternalSpeaker.class không có package thì gặp thông báo Class testCallDefaultPackageClass.Test can not access a member of class InternalSpeaker with modifiers "public" khi bỏ public của phương thức /*public*/ synchronized void play(int frequency, int duration) trong class InternalSpeaker đi thì nhận được thông báo lỗi java.lang.NoSuchMethodException: InternalSpeaker.play(int, int)
Đến đây tớ bớ tay
Bạn nào có nhiều kinh nghiệm sử dụng các native lib thì chia sẻ với.
Tớ đưa kèm project netbeans và đầy đủ file cho các bạn test thử, mong được chia sẻ.

Thường thì khi chúng ta khởi động máy tính lên sẽ có âm báo tình trạng phần cứng từ cái loa chút xíu trên mainboard, nó rất hữu ích khi chúng ta không cần phải gắn loa vào mới biết vấn đề gì. Tớ viết phần mềm ứng dụng và muốn dùng nó để báo lỗi nhưng tìm trên mạng đa phần là nói về 2 cách sau:
Print the ASCII Bell character to the console
Code:
public class TestBeep {
public static main(String args[]) {
// ASCII bell
System.out.print("\007");
System.out.flush();
}
}
Code:
import java.awt.*;
public class Beep {
public static void main(String args[]) {
Toolkit.getDefaultToolkit().beep();
}
}
Sau một vòng lớp trên internet mình cũng tìm được một cách khác là dùng JNI cho chương trình gọi native method trong một file .dll (Tất nhiên là nó chỉ giới hạn là windows rồi).
Trong thư mục đính kèm bạn có thể giải nén ra và chạy file run PlaySound.bat thì sẽ nghe được một giai điệu từ cái loa nho nhỏ trên mainboard.
Vấn đề bắt đầu thực sự là vấn đề khi đưa nó vào chương trình để kết hợp với các class khác.
- Chạy main class PlaySound ở default package thì chương trình chạy bình > Có điệu nhạc.
- Chạy main class PlaySound ở package withPackage thì bị lỗi java.lang.UnsatisfiedLinkError: withPackage.InternalSpeaker.beepPCSpeaker(II)V
Tớ đã sử dụng đến chiêu
Code:
try {
Class c = Class.forName("InternalSpeaker");
Method m = c.getMethod("play", new Class[]{int.class, int.class});
m.invoke(c.newInstance(), new int[]{880, 500});
} catch (Exception ex) {
ex.printStackTrace();
}
Đến đây tớ bớ tay

Tớ đưa kèm project netbeans và đầy đủ file cho các bạn test thử, mong được chia sẻ.
Attachments
-
35.5 KB Lượt xem: 129
-
18.1 KB Lượt xem: 148