JAVA-RMI-對(duì)計(jì)算器編程實(shí)現(xiàn)_第1頁(yè)
JAVA-RMI-對(duì)計(jì)算器編程實(shí)現(xiàn)_第2頁(yè)
JAVA-RMI-對(duì)計(jì)算器編程實(shí)現(xiàn)_第3頁(yè)
JAVA-RMI-對(duì)計(jì)算器編程實(shí)現(xiàn)_第4頁(yè)
JAVA-RMI-對(duì)計(jì)算器編程實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、精選優(yōu)質(zhì)文檔-傾情為你奉上JAVA RMI 對(duì)計(jì)算器編程實(shí)現(xiàn)摘要:本文圍繞Java編程語(yǔ)言在網(wǎng)絡(luò)編程方面的具體應(yīng)用,論述了面向?qū)ο蠓椒?,?duì)計(jì)算器程序進(jìn)行需求分析、概要設(shè)計(jì)、詳細(xì)設(shè)計(jì),最后使用java rmi編程實(shí)現(xiàn)了全過(guò)程。Java作為一種風(fēng)靡一時(shí)的網(wǎng)絡(luò)開(kāi)發(fā)語(yǔ)言,其巨大的威力就體現(xiàn)在它強(qiáng)大的開(kāi)發(fā)分布式網(wǎng)絡(luò)應(yīng)用的能力上,而RMI就是開(kāi)發(fā)百分之百純Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。其實(shí)它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對(duì)象系統(tǒng)。而Java RMI 則支持存儲(chǔ)于不同地址空間的程序級(jí)對(duì)象之間彼此進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程對(duì)象之間的無(wú)縫遠(yuǎn)程調(diào)用。RMI目前使

2、用Java遠(yuǎn)程消息交換協(xié)議JRMP(Java Remote Messaging otocol)進(jìn)行通信。JRMP是專為Java的遠(yuǎn)程對(duì)象制定的協(xié)議。因此,Java RMI具有Java的"Write Once,Run Anywhere"的優(yōu)點(diǎn),是分布式應(yīng)用系統(tǒng)的百分之百純Java解決方案。用Java RMI開(kāi)發(fā)的應(yīng)用系統(tǒng)可以部署在任何支持JRE(Java Run Environment Java,運(yùn)行環(huán)境)的平臺(tái)上。本文擬從程序的角度舉例介紹怎樣利用RMI實(shí)現(xiàn)Java分布式應(yīng)用。 關(guān)鍵詞:JAVA RMI 分布式 應(yīng)用Abstract : This pap

3、er focuses on the specific application in the Java programming language network programming , discusses the object-oriented method, the calculator program needs analysis , outline design , detailed design , and finally the use of java rmi programming the entire process. As a rage Java web developmen

4、t language, and its enormous power is reflected in the ability of its powerful development of distributed network applications , while the core 100% pure Java RMI is to develop a network of distributed application system one of the solutions . In fact, it can be seen as RPC Java version. But traditi

5、onal RPC is not well applied to distributed object systems . The Java RMI supports communication between the stored procedures in different address spaces each object class , seamless remote call remote objects. Currently the use of Java RMI remote message exchange protocol JRMP (Java Remote Messagi

6、ng PRotocol) communication. JRMP is a protocol designed for Java remote object making. Thus , the advantages of "Write Once, Run Anywhere" The Java RMI with Java , and is 100% pure Java distributed application system solutions. Applications developed using Java RMI systems can be deployed

7、on any platform supported JRE (Java Run Environment Java, Runtime Environment) . This paper , for example from the perspective of how to introduce the use of the program 's implementation of Java RMI distributed applications .Keywords: JAVA RMI Distributed Application 1引言隨著科學(xué)技術(shù)的發(fā)展,計(jì)算機(jī)領(lǐng)域也在飛速的發(fā)展,人

8、們對(duì)于計(jì)算器的要求越來(lái)越高。而java語(yǔ)言是今年來(lái)比較流行的語(yǔ)言。經(jīng)過(guò)10多年的發(fā)展,java已經(jīng)滲透到全球的每個(gè)角落。而在這個(gè)網(wǎng)絡(luò)時(shí)代,java語(yǔ)言在網(wǎng)絡(luò)編程方面的有事使得網(wǎng)絡(luò)編程有了更好的選擇。Java語(yǔ)言最令人矚目的特點(diǎn)就是其具有跨平臺(tái)性,使其不受平臺(tái)影響,并得到了廣泛的應(yīng)用。1.1 RMI系統(tǒng)運(yùn)行機(jī)理RMI應(yīng)用程序通常包括兩個(gè)獨(dú)立的程序:服務(wù)器程序和客戶機(jī)程序。典型的服務(wù)器應(yīng)用程序?qū)?chuàng)建多個(gè)遠(yuǎn)程對(duì)象,使這些遠(yuǎn)程對(duì)象能夠被引用,然后等待客戶機(jī)調(diào)用這些遠(yuǎn)程對(duì)象的方法。而典型的客戶機(jī)程序則從服務(wù)器中得到一個(gè)或多個(gè)遠(yuǎn)程對(duì)象的引用,然后調(diào)用遠(yuǎn)程對(duì)象的方法。RMI為服務(wù)器和客戶機(jī)進(jìn)行通信和信息傳遞

9、提供了一種機(jī)制。在與遠(yuǎn)程對(duì)象的通信過(guò)程中,RMI使用標(biāo)準(zhǔn)機(jī)制:stub和skeleton。遠(yuǎn)程對(duì)象的stub擔(dān)當(dāng)遠(yuǎn)程對(duì)象的客戶本地代表或代理人角色。調(diào)用程序?qū)⒄{(diào)用本地stub的方法,而本地stub將負(fù)責(zé)執(zhí)行對(duì)遠(yuǎn)程對(duì)象的方法調(diào)用。在RMI中,遠(yuǎn)程對(duì)象的stub與該遠(yuǎn)程對(duì)象所實(shí)現(xiàn)的遠(yuǎn)程接口集相同。調(diào)用stub的方法時(shí)將執(zhí)行下列操作:(1) 初始化與包含遠(yuǎn)程對(duì)象的遠(yuǎn)程虛擬機(jī)的連接;(2) 對(duì)遠(yuǎn)程虛擬機(jī)的參數(shù)進(jìn)行編組(寫(xiě)入并傳輸);(3) 等待方法調(diào)用結(jié)果;(4) 解編(讀?。┓祷刂祷蚍祷氐漠惓?;(5) 將值返回給調(diào)用程序。為了向調(diào)用程序展示比較簡(jiǎn)單的調(diào)用機(jī)制,stub將參數(shù)的序列化和網(wǎng)絡(luò)級(jí)通信等細(xì)節(jié)

10、隱藏了起來(lái)。在遠(yuǎn)程虛擬機(jī)中,每個(gè)遠(yuǎn)程對(duì)象都可以有相應(yīng)的skeleton(在JDK1.2環(huán)境中無(wú)需使用skeleton)。Skeleton負(fù)責(zé)將調(diào)用分配給實(shí)際的遠(yuǎn)程對(duì)象實(shí)現(xiàn)。它在接收方法調(diào)用時(shí)執(zhí)行下列操作:(1) 解編(讀?。┻h(yuǎn)程方法的參數(shù);(2) 調(diào)用實(shí)際遠(yuǎn)程對(duì)象實(shí)現(xiàn)上的方法;(3) 將結(jié)果(返回值或異常)編組(寫(xiě)入并傳輸)給調(diào)用程序。stub和skeleton由rmic編譯器生成。利用RMI編寫(xiě)分布式對(duì)象應(yīng)用程序需要完成以下工作2:(1) 定位遠(yuǎn)程對(duì)象。應(yīng)用程序可使用兩種機(jī)制中的一種得到對(duì)遠(yuǎn)程對(duì)象的引用。它既可用RMI的簡(jiǎn)單命名工具rmiregistry來(lái)注冊(cè)它的遠(yuǎn)程對(duì)象,也可以將遠(yuǎn)程對(duì)象引

11、用作為常規(guī)操作的一部分來(lái)進(jìn)行傳遞和返回。(2)與遠(yuǎn)程對(duì)象通信。遠(yuǎn)程對(duì)象間通信的細(xì)節(jié)由RMI處理,對(duì)于程序員來(lái)說(shuō),遠(yuǎn)程通信看起來(lái)就像標(biāo)準(zhǔn)的Java方法調(diào)用。(3)給作為參數(shù)或返回值傳遞的對(duì)象加載類字節(jié)碼。因?yàn)镽MI答應(yīng)調(diào)用程序?qū)⒓僇ava對(duì)象傳給遠(yuǎn)程對(duì)象,所以,RMI將提供必要的機(jī)制,既可以加載對(duì)象的代碼又可以傳輸對(duì)象的數(shù)據(jù)。在RMI分布式應(yīng)用程序運(yùn)行時(shí),服務(wù)器調(diào)用注冊(cè)服務(wù)程序以使名字與遠(yuǎn)程對(duì)象相關(guān)聯(lián)??蛻魴C(jī)在服務(wù)器上的注冊(cè)服務(wù)程序中用遠(yuǎn)程對(duì)象的名字查找該遠(yuǎn)程對(duì)象,然后調(diào)用它的方法。1.2 對(duì)象序列化在RMI分布式應(yīng)用系統(tǒng)中,服務(wù)器與客戶機(jī)之間傳遞的Java對(duì)象必須是可序列化的對(duì)象。不可序列化的

12、對(duì)象不能在對(duì)象流中進(jìn)行傳遞。對(duì)象序列化擴(kuò)展了核心Java輸入/輸出類,同時(shí)也支持對(duì)象。對(duì)象序列化支持把對(duì)象編碼以及將通過(guò)它們可訪問(wèn)到的對(duì)象編碼變成字節(jié)流;同時(shí),它也支持流中對(duì)象圖形的互補(bǔ)重構(gòu)造。序列化用于輕型持久性和借助于套接字或遠(yuǎn)程方法調(diào)用(RMI)進(jìn)行的通信。序列化中現(xiàn)在包括一個(gè) API( Programming Interface,應(yīng)用程序接口),答應(yīng)獨(dú)立于類的域指定對(duì)象的序列化數(shù)據(jù),并答應(yīng)使用現(xiàn)有協(xié)議將序列化數(shù)據(jù)域?qū)懭肓髦谢驈牧髦凶x取,以確保與缺省讀寫(xiě)機(jī)制的兼容性。為編寫(xiě)應(yīng)用程序,除多數(shù)瞬態(tài)應(yīng)用程序外,都必須具備存儲(chǔ)和檢索 Java對(duì)象的能力。以序列化方式存儲(chǔ)和檢索對(duì)象的要害

13、在于提供重新構(gòu)造該對(duì)象所需的足夠?qū)ο鬆顟B(tài)。存儲(chǔ)到流的對(duì)象可能會(huì)支持 Serializable(可序列化)或 Externalizable(可外部化)接口。對(duì)于Java對(duì)象,序列化形式必須能標(biāo)識(shí)和校驗(yàn)存儲(chǔ)其內(nèi)容的對(duì)象所屬的 Java類,并且將該內(nèi)容還原為新的實(shí)例。對(duì)于可序列化對(duì)象,流將提供足夠的信息將流的域還原為類的兼容版本。對(duì)于可外部化對(duì)象,類將全權(quán)負(fù)責(zé)其內(nèi)容的外部格式。序列化 Java 對(duì)象的目的是:提供一種簡(jiǎn)單但可擴(kuò)充的機(jī)制,以序列化方式維護(hù) Java對(duì)象的類型及安全屬性;具有支持編組和解編的擴(kuò)展能力以滿足遠(yuǎn)程對(duì)象的需要;具有可擴(kuò)展性以支持 Java 對(duì)象的簡(jiǎn)單持久性;只有在自定義時(shí),才需

14、對(duì)每個(gè)類提供序列化自實(shí)現(xiàn);答應(yīng)對(duì)象定義其外部格式。2 分布式應(yīng)用的實(shí)現(xiàn)和運(yùn)行步驟2.1 編寫(xiě)Java RMI分布式應(yīng)用程序的步驟主要包括以下幾步:將遠(yuǎn)程類的功能定義為Java接口。在Java中,遠(yuǎn)程對(duì)象是實(shí)現(xiàn)遠(yuǎn)程接口的類的實(shí)例1。在遠(yuǎn)程接口中聲明每個(gè)要遠(yuǎn)程調(diào)用的方法。遠(yuǎn)程接口具有如下特點(diǎn):1) 遠(yuǎn)程接口必須聲明為public。假如不這樣,則除非客戶端與遠(yuǎn)程接口在同一個(gè)包內(nèi),否則當(dāng)試圖裝入實(shí)現(xiàn)該遠(yuǎn)程接口的遠(yuǎn)程對(duì)象時(shí)會(huì)得到錯(cuò)誤結(jié)果。2) 遠(yuǎn)程對(duì)象擴(kuò)展java.rmi.Remote接口。3) 除了所有應(yīng)用程序特定的例外之外,每個(gè)方法還必須拋出java.rmi.RemoteException例外。4)

15、 任何作為參數(shù)或返回值傳送的遠(yuǎn)程對(duì)象的數(shù)據(jù)類型必須聲明為遠(yuǎn)程接口類型,而不是實(shí)現(xiàn)類。2.2 系統(tǒng)功能圖圖 2.2 計(jì)算器系統(tǒng)功能圖3 程序設(shè)計(jì)說(shuō)明下面是一個(gè)使用RMI實(shí)現(xiàn)的計(jì)算器,主要分為兩個(gè)部分,服務(wù)器主要實(shí)現(xiàn)接受客服端的連接并進(jìn)行加、減、乘、除,最后將結(jié)果返回給客戶端,客戶端主要實(shí)現(xiàn)對(duì)計(jì)算器的GUI編程,添加事件監(jiān)聽(tīng),對(duì)用戶進(jìn)行的操作進(jìn)行判斷,并調(diào)用客服端的方法進(jìn)行計(jì)算。下面對(duì)結(jié)果和程序進(jìn)行分析:定義一個(gè)接口并從實(shí)現(xiàn)Remate接口定義一個(gè)CalculatorImp類實(shí)現(xiàn)Calculator這個(gè)接口,并重寫(xiě)接口的方法服務(wù)端進(jìn)行注冊(cè)客戶端進(jìn)行遠(yuǎn)程方法調(diào)用運(yùn)行結(jié)果如下:?jiǎn)?dòng)服務(wù)端啟動(dòng)客戶端:參

16、考文獻(xiàn):1 編程思想 Thinking in Java 4th Bruce Eckel著 北京;機(jī)械工業(yè)出版社,20072 分布式操作系統(tǒng) Andrew S.Tanenbaum著 北京;電子工業(yè)出版社,2008附源代碼:package com.cqupt.RMI;import java.rmi.Remote;public interface Calculator extends Remote /J2SE的API中Remote確實(shí)是個(gè)接口,/只有實(shí)現(xiàn)了remote接口的方法才可以被遠(yuǎn)程調(diào)用Public double add(double a,double b)throws java.rmi.Re

17、moteException;public double sub(double a,double b)throws java.rmi.RemoteException;public double mul(double a,double b)throws java.rmi.RemoteException;public double div(double a,double b)throws java.rmi.RemoteException;package com.cqupt.RMI;import java.rmi.RemoteException;import java.rmi.server.Unica

18、stRemoteObject;public class CalculatorImp extends UnicastRemoteObject implements Calculator CalculatorImp() throws RemoteExceptionsuper();public double add(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " +

19、 " + b + "=" + (a + b);return a + b;public double div(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " / " + b + "=" + (a / b);return a / b;public double mul(double a, double b

20、 )throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println("RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " * " + b + "=" + (a * b);return a * b;public double sub(double a, double b) throws java.rmi.RemoteException / TODO Auto-generated method stubSystem.out.println(&

21、quot;RMI調(diào)用服務(wù)端所得結(jié)果:" + a + " - " + b + "=" + (a - b);return a - b;package com.cqupt.RMI;import .MalformedURLException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;public class CaculatorServer CaculatorServer()try Calculator c

22、= new CalculatorImp();LocateRegistry.createRegistry(3000);/使用一個(gè)新的端口,默認(rèn)端口是1109Naming.rebind("rmi:/localhost:3000/CaculatorServer", c); /將server注冊(cè)System.out.println("服務(wù)器注冊(cè)成功"); catch (RemoteException e) e.printStackTrace(); catch (MalformedURLException e1)e1.printStackTrace();publi

23、c static void main(String args)new CaculatorServer();package com.cqupt.RMI;import .MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.io.*;public class CalculatorCli

24、ent extends JFrame private String front = "", behind = "" /分別用于記錄加減乘除運(yùn)算符之前,之后輸入的內(nèi)容 private String op; /用于記錄運(yùn)算符 private String re;/用于存儲(chǔ)運(yùn)算結(jié)果的字符串格式 private boolean flag = false; /用于記錄是否按下了運(yùn)算符 private boolean flag1 = false;/用于判斷是否輸入了點(diǎn)運(yùn)算符 private double result;/用于存儲(chǔ)運(yùn)算結(jié)果 private boolea

25、n flag2 = false;/用于判斷是否輸入了數(shù)字 private boolean flag3 = false;/用于判斷是否按下了等號(hào)運(yùn)算符 JPanel contentPane; JTextField txtResult = new JTextField("0"); JButton btnNull = new JButton("sqrt"); JButton btnFour = new JButton("4"); JButton btnFive = new JButton("5"); JButton bt

26、nSix = new JButton("6"); JButton btnDecrease = new JButton("-"); JButton btnBegin = new JButton("C"); JButton btnOne = new JButton("1"); JButton btnTwo = new JButton("2"); JButton btnThree = new JButton("3"); JButton btnMultiply = new JButt

27、on("*"); JButton btnCancel = new JButton(""); JButton btnZero = new JButton("0"); JButton btnMinus = new JButton("+/-"); JButton btnPoint = new JButton("."); JButton btnDivide = new JButton("/"); JButton btnEqual = new JButton("="

28、); JButton btnIncrease = new JButton("+"); JButton btnSeven = new JButton("7"); JButton btnEight = new JButton("8"); JButton btnNine = new JButton("9"); public CalculatorClient() try setDefaultCloseOperation(EXIT_ON_CLOSE); jbInit(); catch (Exception exception

29、) exception.printStackTrace(); private void jbInit() throws Exception contentPane = (JPanel) getContentPane(); contentPane.setLayout(null); this.setResizable(false); setSize(new Dimension(400, 300); setTitle("計(jì)算器"); txtResult.setEnabled(false); txtResult.setFont(new java.awt.Font("Dia

30、log", Font.PLAIN, 20); txtResult.setEditable(false); txtResult.setHorizontalAlignment(SwingConstants.RIGHT); txtResult.setBounds(new Rectangle(33, 19, 310, 34); btnNull.setBounds(new Rectangle(298, 70, 46, 37); btnNull.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12); /btnNull.addA

31、ctionListener(new FrameCalculate_btnNull_actionAdapter(this); btnFour.setBounds(new Rectangle(33, 120, 46, 37); btnFour.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnFive.setBounds(new Rectangle(101, 120, 46, 37); btnFive.setFont(new java.awt.Font("Dialog", Font.PLAIN,

32、20); btnSix.setBounds(new Rectangle(167, 119, 46, 37); btnSix.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnDecrease.setBounds(new Rectangle(234, 120, 46, 37); btnDecrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnBegin.setBounds(new Rectangle(298, 121, 46

33、, 37); btnBegin.setFont(new java.awt.Font("Dialog", Font.PLAIN, 15); btnBegin.addActionListener(new Calculate_btnBegin_actionAdapter(this); btnOne.setBounds(new Rectangle(33, 172, 46, 37); btnOne.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnTwo.setBounds(new Rectangle(

34、101, 172, 46, 37); btnTwo.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnThree.setBounds(new Rectangle(167, 172, 46, 37); btnThree.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnMultiply.setBounds(new Rectangle(234, 172, 46, 37); btnMultiply.setFont(new java.awt

35、.Font("Dialog", Font.PLAIN, 20); btnCancel.setBounds(new Rectangle(298, 172, 46, 37); btnCancel.setFont(new java.awt.Font("Dialog", Font.PLAIN, 12); btnCancel.addActionListener(new Calculate_btnCancel_actionAdapter(this); btnZero.setBounds(new Rectangle(33, 222, 46, 37); btnZero.

36、setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); /加載數(shù)字0-9的監(jiān)聽(tīng)事件 btnZero.addActionListener(new Calculate_btnZero_actionAdapter(this); btnOne.addActionListener(new Calculate_btnZero_actionAdapter(this); btnTwo.addActionListener(new Calculate_btnZero_actionAdapter(this); btnThree.addAction

37、Listener(new Calculate_btnZero_actionAdapter(this); btnFour.addActionListener(new Calculate_btnZero_actionAdapter(this); btnFive.addActionListener(new Calculate_btnZero_actionAdapter(this); btnSix.addActionListener(new Calculate_btnZero_actionAdapter(this); btnSeven.addActionListener(new Calculate_b

38、tnZero_actionAdapter(this); btnEight.addActionListener(new Calculate_btnZero_actionAdapter(this); btnNine.addActionListener(new Calculate_btnZero_actionAdapter(this); btnMinus.setBounds(new Rectangle(101, 222, 46, 37); btnMinus.setFont(new java.awt.Font("Dialog", Font.PLAIN, 10); btnMinus.

39、addActionListener(new Calculate_btnMinus_actionAdapter(this); btnPoint.setBounds(new Rectangle(167, 222, 46, 37); btnPoint.setFont(new java.awt.Font("Dialog", Font.PLAIN, 30); btnPoint.setHorizontalTextPosition(SwingConstants.CENTER); btnPoint.addActionListener(new Calculate_btnPoint_actio

40、nAdapter(this); btnDivide.setBounds(new Rectangle(234, 222, 46, 37); btnDivide.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnEqual.setBounds(new Rectangle(298, 222, 46, 37); btnEqual.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnEqual.addActionListener(new Cal

41、culate_btnEqual_actionAdapter(this); btnIncrease.setBounds(new Rectangle(234, 70, 46, 37); btnIncrease.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); /加載加減乘除運(yùn)算符的監(jiān)聽(tīng)事件 btnIncrease.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnDecrease.addActionListener(new Calcula

42、te_btnIncrease_actionAdapter(this); btnMultiply.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnDivide.addActionListener(new Calculate_btnIncrease_actionAdapter(this); btnSeven.setBounds(new Rectangle(33, 70, 46, 37); btnSeven.setFont(new java.awt.Font("Dialog", Font.PL

43、AIN, 20); btnEight.setBounds(new Rectangle(101, 70, 46, 37); btnEight.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); btnNine.setBounds(new Rectangle(167, 70, 46, 37); btnNine.setFont(new java.awt.Font("Dialog", Font.PLAIN, 20); contentPane.add(btnFive); contentPane.add(btnS

44、ix); contentPane.add(btnDecrease); contentPane.add(btnBegin); contentPane.add(btnOne); contentPane.add(btnTwo); contentPane.add(btnThree); contentPane.add(btnMultiply); contentPane.add(btnCancel); contentPane.add(btnMinus); contentPane.add(btnPoint); contentPane.add(btnDivide); contentPane.add(btnEq

45、ual); contentPane.add(btnEight); contentPane.add(btnNine); contentPane.add(btnFour); contentPane.add(btnSeven); contentPane.add(btnIncrease); contentPane.add(btnNull); contentPane.add(txtResult); contentPane.add(btnZero); public void btnZero_actionPerformed(ActionEvent e) if (flag) /如果剛剛按下了運(yùn)算符 txtRe

46、sult.setText(""); if (flag1) /判斷之前是否輸入了點(diǎn)運(yùn)算符 txtResult.setText("0." + e.getActionCommand(); flag1 = false; else txtResult.setText(e.getActionCommand(); flag2 = true; else int num = txtResult.getText().indexOf("."); if (num < 0 && !txtResult.getText().equals(&q

47、uot;0") txtResult.setText(txtResult.getText() + e.getActionCommand(); else if (num < 0 && txtResult.getText().equals("0") txtResult.setText(e.getActionCommand(); else if (num >= 0 && txtResult.getText().equals("0") txtResult.setText("0." + e.g

48、etActionCommand(); else if (num >= 0 && !txtResult.getText().equals("0") txtResult.setText(txtResult.getText() + e.getActionCommand(); flag = false; flag3=false; public void btnIncrease_actionPerformed(ActionEvent e) if(flag3) txtResult.setText(txtResult.getText(); op = e.getAct

49、ionCommand(); /得到剛剛按下的運(yùn)算符 front = txtResult.getText(); /記錄加減乘除運(yùn)算符之前輸入的內(nèi)容 else if (flag2) ActionEvent ee = new ActionEvent("qq", 1, "pp"); btnEqual_actionPerformed(ee); op = e.getActionCommand(); /得到剛剛按下的運(yùn)算符 front = re; flag2 = false; else front = txtResult.getText(); /記錄加減乘除運(yùn)算符之前

50、輸入的內(nèi)容 op = e.getActionCommand(); /得到剛剛按下的運(yùn)算符 flag3=false; flag = true; /記錄已經(jīng)按下了加減乘除運(yùn)算符的其中一個(gè) public void btnEqual_actionPerformed(ActionEvent e) if(!flag3)/未曾按下等于運(yùn)算符 behind = txtResult.getText(); else front = re; try double a1 = Double.parseDouble(front); double b1 = Double.parseDouble(behind); if (o

51、p = "+") result = this.invoke(a1, b1, "+"); else if (op = "-") result = this.invoke(a1, b1, "-"); else if (op = "*") result = this.invoke(a1, b1, "*"); else result = this.invoke(a1, b1, "/"); Double r = new Double(result); re = r.

52、toString(result); txtResult.setText(re); catch (ArithmeticException ce) txtResult.setText("除數(shù)不能為零"); catch (Exception ee) if (!flag3) flag3 = true; public double invoke(double a1,double b1,String symbol)double result = 0;try Calculator c = (Calculator)Naming.lookup("rmi:/localhost:3000/CaculatorServer");/Naming.lookup will retur

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論