私は大部分のためにしたいタイプライタークラスを作りました。与えられた文字列を一度に1文字ずつ出力し、入力されたものと同じように各文字列の間で一時停止し、ピリオドの後にもう少し休止します。私が今問題を抱えているのは、このクラスを使うときには一度しか動かないということです。私はそれを2度(またはそれ以上)呼び出すと、同時にそれらを実行しようとします。これは大きな問題を引き起こします。ですから、このクラスの最初のインスタンスを実行する方法と、開始する前に "それのターン"を待つ方法が必要です。以下は、望ましいアウトカムと電流の例です。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"、出力);
CURRENT OUTPUT
HW ol elr ldo
もちろん、私はタイプライタークラスからコードの大部分を残し
Hello
World
所望の出力。それが本当に必要なら、私はそれを投稿することができます。 ActiveObjectのjavadocsは
hereです。これは私がスレッドを教えられた方法で、私はそれが問題であるかもしれないと恐れています。
EDIT:
I以下の答えPERが同期(アウト)の行を追加しましたが、私は、コードを実行しようとすると、私は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は私が新しいタイプライター( "Testing"、output)と呼ぶ場所です。出力はJTextArea クライアントライン66は、タイプライターが入っているinitGame()の呼び出しです クライアントライン24はJFrameコンストラクタです。
はい、コードが必要です。投稿してください。 – Abbas
いいえ... – CaldwellYSR
FIFOタスクキューのようなものを使用したいと思うかもしれません。 –