我已經設法創建了一個打字機類,它能夠完成我想要的大部分功能。它會一次輸出給它一個字符的字符串,在每個字符之間暫停,就好像它們被鍵入一樣,在句點之後暫停一會兒。我現在遇到的問題是,當我使用這個類時,它只能工作一次。當我將它調用兩次(或更多)時,它會嘗試同時運行它們。這會導致重大問題。所以我需要一種方法讓這個類的第一個實例運行,並且每個在開始之前等待「輪到」。以下是期望的結果和當前的例子。使用JTextArea的打字機效果
import objectdraw.*; // Where active object comes from.
import javax.swing.JTextArea;
public class Typewriter extends ActiveObject {
private JTextArea out;
private String in;
public Typewriter(String s, JTextArea output) {
in = s;
out = output;
start();
}
public void run() {
synchronized(out) {
for(int i=0; i<in.length(); i++) {
out.append(in.substring(i,i+1));
if(in.charAt(i) == '.') {
pause(30);
} else {
pause(200);
}
}
}
}
}
電流:
CODE: 新打字機( 「\ nHello」,輸出); 新型打字機(「\ nWorld」,輸出);
電流輸出
HW ol elr ldo
所需的輸出
Hello
World
很顯然,我省略了大部分的代碼從打字機類。如果真的需要我可以發佈。 ActiveObject的javadoc可以在here找到。這就是我被教過的線程,我擔心這可能是問題所在。
編輯:
每下面我已經添加了同步(OUT)線,但我得到一個NullPointerException當我嘗試運行代碼的答案。
Exception in thread "main" java.lang.NullPointerException
at objectdraw.ActiveObject.<init>(ActiveObject.java:239)
at com.caldwellysr.TBA.Typewriter.<init>(Typewriter.java:11)
at com.caldwellysr.TBA.Client.initGame(Client.java:78)
at com.caldwellysr.TBA.Client.<init>(Client.java:66)
at com.caldwellysr.TBA.Client.main(Client.java:24)
打字機第11行是構造函數的標題。 客戶端行78是我打電話給新的打字機(「測試」,輸出);其中輸出是JTextArea 客戶機行66是對具有打字機的initGame()的調用 客戶機行24是JFrame構造函數。
是的,代碼是必需的。請張貼它。 – Abbas 2012-01-30 03:55:56
好吧會做... – CaldwellYSR 2012-01-30 03:57:40
聽起來像你可能想要使用某種FIFO任務隊列。 – 2012-01-30 03:59:51