在我的項目中,我有一個處理連接到它的多個客戶端的服務器。每次連接客戶端時,都會創建一個新的「Guitar」,該客戶端在新線程上特定於該「Guitar」。每個「吉他」是12個吉他弦的數組,當在客戶窗口中按下與一個弦相對應的鍵時,該吉他的弦被拔出。多線程服務器/每個線程上的新對象
我在我的吉他類中有一個名爲notePlayed(char key)的方法,它可以「拉」字符串並將所有「拉」添加到要播放的組合音頻中。不過,我遇到了此問題任何時候它被稱爲:
key pressedj
Exception in thread "Thread-4" java.lang.NullPointerException
notePlayed accessed
at Guitar.notePlayed(Guitar.java:29)
at GuitarListener.run(GuitarServer.java:33)
at java.lang.Thread.run(Thread.java:680)
我guitarserver看起來是這樣的:
class GuitarListener implements Runnable {
private Socket sock;
private GuitarListenerGui gui;
private Guitar guitar;
public GuitarListener(Socket s, GuitarListenerGui g, Guitar gt) {
this.sock = s;
this.gui = g;
this.guitar = gt;
}
public void run() {
boolean loop=true;
try {
//setting up printwriters and bufferedreaders removed
System.out.println("key pressed" + key);
Guitar.notePlayed(key);
}
與在GuitarServer類進一步下跌
String keyboard ="qwertyuiop[]";
GuitarString[] gStrings = new GuitarString[keyboard.length()];
Guitar guitar = new Guitar(gStrings, keyboard);
GuitarListener job = new GuitarListener(serverSocket.accept(), gui, guitar);
// start a new thread to handle the connection
Thread t = new Thread(job);
t.start();
創造了新的吉他和線程
和我的吉他班看起來像這樣:
public class Guitar {
private static String keyboard;;
private static GuitarString[] gStrings;
public Guitar (GuitarString[] gStrings, String keyboard){
this.keyboard=keyboard;
this.gStrings=gStrings;
}
與for循環這裏會導致錯誤:
public static void notePlayed (char key){
double sample=0.0;
for (int i=0; i<keyboard.length(); i++){//adds all of the strings to sample to be played
sample+=gStrings[i].sample();
很抱歉後的長度,但任何人可以點我在正確的方向還是讓我知道我是多麼遙遠?提前致謝。我很高興回答您可能遇到的任何問題。
在吉他的主要功能我初始化guitarstrings與此循環:
for(int i=0;i<keyboard.length();i++){
double iNote = 440.0* Math.pow(2, i/12.0);//puts the correct frequency with each string
System.out.println(iNote);
gStrings[i] = new GuitarString(iNote);
}
您正在使用哪種IDE?如果您正在使用Eclipse,請轉至您的斷點併爲「空指針異常」添加一個斷點,以便您更好地瞭解問題所在。似乎有一些很好的調試,你應該能夠弄清楚這一點。 –
你有一個NullPointerException,它告訴你在哪裏。你正試圖使用'null'的東西。這是熟悉調試器的絕佳機會。 –
謝謝,我從來沒有真正被引入調試工具,但我一定會嘗試和玩弄它。 – Nolan