📄 primeclient.java
字号:
package primecruncher;import net.jxta.document.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import java.util.*;public class PrimeClient extends JPanel implements ResultListener{//实体并不分配给其他的对等节点//为素数检索服务起代理的作用 private Dispatcher primeservice=null; private JTextArea results; private JTextArea status; //为素数查询服务提供图形化的客户端 public PrimeClient(Dispatcher disp){ primeservice=disp; buildGUI(); } /*********************************************************************/ //创建客户端界面 private void buildGUI(){ setLayout(new BorderLayout()); JPanel topPanel=new JPanel(); topPanel.setLayout(new FlowLayout()); final JTextField fromField=new JTextField(10); final JTextField toField=new JTextField(10); topPanel.add(new JLabel("From:")); topPanel.add(fromField); topPanel.add(new JLabel("To:")); topPanel.add(toField); status=new JTextArea(5,20); results=new JTextArea(20,20); JScrollPane scrollPane=new JScrollPane(results); JScrollPane statusScroll=new JScrollPane(status); JPanel centerPanel=new JPanel(); centerPanel.setLayout(new BorderLayout()); centerPanel.add(statusScroll,BorderLayout.NORTH); centerPanel.add(scrollPane,BorderLayout.CENTER); JButton goButton=new JButton("开始"); JButton exitButton=new JButton("Exit"); JPanel buttPanel=new JPanel(); buttPanel.add(goButton); buttPanel.add(exitButton); add(topPanel,BorderLayout.NORTH); add(centerPanel,BorderLayout.CENTER); add(buttPanel,BorderLayout.SOUTH); goButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //对goButton作事件监听 String low=fromField.getText(); String high=toField.getText(); results.setText(""); try{int l=Integer.parseInt(low); //将字符串类型转换为整型 int h=Integer.parseInt(high); //将字符串类型转换为整型 primeservice.processPrimes(l,h,PrimeClient.this); //调用Dispacher类的processPrimes()方法,实现任务的创建并分发######## }catch(NumberFormatException e1){ status.setText("Wrong args"); } } }); exitButton.addActionListener(new ActionListener(){ public void actionPerformed(ActionEvent e){ //对exitButton作事件监听 System.exit(0); } }); } /*****************************************************************/ private void displayStats(ComputeStats stats){ //status.append("Stats for job " + stats.getJobID()); ComputeStats.NodeStat[] ns=stats.getNodeStats(); for(int i=0;i < ns.length;i++){ status.append(ns[i].getNodeID()+"computed segment"); status.append(new Integer(ns[i].getLow()).toString()+"-"); status.append(new Integer(ns[i].getHi()).toString()+"in"); status.append(new Double((ns[i].getComputeTime())/1000).toString()+"seconds.\n"); } } /*****************************************************************/ private void displayResult(Map res){ String resString=(String)res.get(ServiceConstants.RESULTSTRING);//如果有太多的结果,不显示 if(resString.length()>100000) return; StringTokenizer tk=new StringTokenizer(resString,","); int i=0; while(tk.hasMoreTokens()){ results.append(tk.nextToken()+" "); if(i>25){ results.append("\n"); i=0; } i++; } } /*****************************************************************/ public static void main(String[] args){ Dispatcher disp=new Dispatcher(); //将客户端作为一个对等组创建 PrimeClient app=new PrimeClient(disp); JFrame f=new JFrame("Prime cruncher"); f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent e){ System.exit(0); } }); Toolkit tk=Toolkit.getDefaultToolkit(); Dimension dim=tk.getScreenSize(); int appWidth=(int)(dim.getWidth()/2); int appHeight=(int)(dim.getHeight()/2); app.setPreferredSize(new Dimension(appWidth,appHeight)); int x=(int)dim.getWidth()/2-(int)appWidth/2; int y=(int)dim.getHeight()/2-(int)appHeight/2; f.getContentPane().add(app); f.pack(); f.setLocation(x,y); f.setVisible(true); } /*****************************************************************/ public void resultEvent(Map result){ displayStats((ComputeStats)result.get(ServiceConstants.JOBSTATS)); displayResult(result); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -