学习java三周,关于<>第15章习题4的解答,请高手捉虫
题目:
设计一个程序E1504.java, 使用3个JTextField元件的线程,每个线程休息的毫秒数由随记数决定,
并随机显示26个英文字母之一。
解答代码:
//MyWindowListener.java
package e1504;
import java.awt.event.*;
public class MyWindowListener extends WindowAdapter {
public void windowClosing(WindowEvent e)
{
System.exit(1);
}
}
//E1504.java
package e1504;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
//import myclass.MyWindowListener;
class E1504 extends JFrame
implements ActionListener
{
/**
* @param args
*/
private static final long serialVersionUID = 1L;
JTextField tf1= new JTextField(" ",10);
JTextField tf2= new JTextField(" ",10);
JTextField tf3= new JTextField(" ",10);
private Container c;
private Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
private Dimension frameSize;
private static int para[]= {1,2,3};
public E1504()
{
super("E1504.java");
c = getContentPane();
c.setLayout(new FlowLayout(FlowLayout.CENTER));
c.add(tf1);
c.add(tf2);
c.add(tf3);
tf1.setEditable(false);
tf2.setEditable(false);
tf3.setEditable(false);
setSize(380,60);
setVisible(true);
// Center the window
frameSize = this.getSize();
if (frameSize.height > screenSize.height)
{
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width)
{
frameSize.width = screenSize.width;
}
setLocation((screenSize.width - frameSize.width)/2, (screenSize.height - frameSize.height)/2);
}
public void actionPerformed(ActionEvent e)
{
//tf1.setText("Run Thread1:" + eThread.pChar);
//tf2.setText("Run Thread2:" + eThread.pChar);
//tf3.setText("Run Thread3:" + eThread.pChar);
}
public static void main(String args[])
{
// TODO Auto-generated method stub
E1504 app = new E1504();
app.addWindowListener(new MyWindowListener());
E1504Thread tfThread[] = new E1504Thread[3];
for (int i=0; i<3; i++)
tfThread[i] = new E1504Thread(para[i], app);
for (int i=0; i<3; i++)
{
new Thread(tfThread[i]).start();
}
}
}
class E1504Thread implements Runnable
{
private int sleepTime = 0;
private int pid;
private char pChar;
private E1504 frameObj;
public E1504Thread(int id, E1504 eFrame)
{
frameObj =eFrame;
pid = id;
}
public void run()
{
while (true)
{
try
{
Thread.sleep(sleepTime);
if (pid == 1)
frameObj.tf1.setText("Run Thread" + 1 + ":" + pChar);
else if (pid == 2)
frameObj.tf2.setText("Run Thread" + 2 + ":" + pChar);
else if (pid == 3)
frameObj.tf3.setText("Run Thread" + 3 + ":" + pChar);
}
catch (InterruptedException e)
{
e.printStackTrace();
return;
}
sleepTime = (int)(Math.random()*1000);
pChar = (char)((Math.random()*26)+ 65);
}
}
}
以上代码在eclipse SDK 3.2.1下编译通过。基本满足题目要求
现请教下高手还有什么方法可实现?