回 帖 发 新 帖 刷新版面

主题:请高手帮我看看哪里错了

我是想实现多线程编一边记录键盘输入,一边输出.一定要用多线程,但是我的程序只输出开始输入的一个字母,其他就不输出,还有输入输到一定字母就停着,什么回事啊
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BufferLock extends JFrame 
{   
    private JTextField tf1 = new JTextField();
    private String d;
    private boolean isEmpty=true;
    public synchronized void put(String dd)
    {
        while(!isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        d=dd;
        isEmpty=false;
        notify();
    }
    public synchronized String get()
    {
        while(isEmpty)
        {
            try{
                this.wait();
            }
            catch(InterruptedException e){}
        }
          isEmpty=true;
          notify();
          return d;
    }
}
class Sender extends Thread implements KeyListener
{
    private BufferLock buffer;
    private JTextField text;
    public Sender(BufferLock buffer,JTextField text)
    {
        this.buffer=buffer;
        this.text=text;
    }
    public void run()
    {
        text.addKeyListener(this);
        
    }
    public void keyTyped(KeyEvent e)
    {
        
    }
    
    public void keyReleased(KeyEvent e)
    {
        buffer.put(e.getKeyChar()+"");
    }
    
    public void keyPressed(KeyEvent e)
    {
        
    }
}
class Receiver extends Thread
{
    private BufferLock buffer;
    private JTextField text1;
    public Receiver(BufferLock buffer,JTextField text1)
    {
        
        this.buffer=buffer;
        this.text1=text1;
        
    }
    public void run()
    {
        text1.setText(buffer.get());
    }

}
class BufferFrame extends JFrame
{
    private JTextField text = new JTextField();
    private JTextField text1 = new JTextField();
    public BufferFrame()
    {   JPanel panel=new JPanel(new GridLayout(2,1));
        this.add(panel);
        panel.add(text);
        panel.add(text1);

        this.pack();
        this.setResizable(false);
        this.setVisible(true);
    }
    public static void main(String args[])
    {
        BufferFrame bufferframe=new BufferFrame();
        BufferLock buffer=new BufferLock();
        (new Sender(buffer,bufferframe.text)).start();
        (new Receiver(buffer,bufferframe.text1)).start();
    }
}

回复列表 (共2个回复)

沙发

期待回复中..................

板凳

已改正:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class BufferLock extends JFrame 
{   
    private JTextField tf1 = new JTextField();
    private String d;
    private boolean isEmpty=true;
    public synchronized void put(String dd)
    {
        while(!isEmpty)
        {
            try
            {
                this.wait();
            }
            catch(InterruptedException e){}
        }
        d=dd;
        isEmpty=false;
        notify();
    }
    public synchronized String get()
    {
        while(isEmpty)
        {
            try{
                this.wait();
            }
            catch(InterruptedException e){}
        }
          isEmpty=true;
          notify();
          return d;
    }
}
class Sender extends Thread implements KeyListener
{
    private BufferLock buffer;
    private JTextField text;
    public Sender(BufferLock buffer,JTextField text)
    {
        this.buffer=buffer;
        this.text=text;
    }
    public void run()
    {
        text.addKeyListener(this);
        
    }
    public void keyTyped(KeyEvent e)
    {
        
    }
    
    public void keyReleased(KeyEvent e)
    {
        buffer.put(e.getKeyChar()+"");
    }
    
    public void keyPressed(KeyEvent e)
    {
        
    }
}
class Receiver extends Thread
{
    private BufferLock buffer;
    private JTextField text1;
    public Receiver(BufferLock buffer,JTextField text1)
    {
        
        this.buffer=buffer;
        this.text1=text1;
        
    }
    public void run()
    {
        while(true){
        text1.setText(buffer.get());
                   }
    }

}
class BufferFrame extends JFrame
{
    private JTextField text = new JTextField();
    private JTextField text1 = new JTextField();
    public BufferFrame()
    {   JPanel panel=new JPanel(new GridLayout(2,1));
        this.add(panel);
        panel.add(text);
        panel.add(text1);

        this.pack();
        this.setResizable(false);
        this.setVisible(true);
    }
    public static void main(String args[])
    {
        BufferFrame bufferframe=new BufferFrame();
        BufferLock buffer=new BufferLock();
        (new Sender(buffer,bufferframe.text)).start();
        (new Receiver(buffer,bufferframe.text1)).start();
    }
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册