jta格式
Ⅰ 求解析java代碼,最好逐行解釋
publicstaticvoidreadTxtFile(StringfilePath){
try{
Stringencoding="GBK";
Filefile=newFile(filePath);
if(file.isFile()&&file.exists()){//判斷文件是否存在
InputStreamReaderread=newInputStreamReader(
newFileInputStream(file),encoding);//考慮到編碼格式
BufferedReaderbufferedReader=newBufferedReader(read);
StringlineTxt=null;
while((lineTxt=bufferedReader.readLine())!=null){
System.out.println(lineTxt.split("|||||||||||||")[0].split("|")[0]);
System.out.println(lineTxt.split("|||||||||||||")[0].split("|")[1]);
System.out.println(lineTxt.split("|||||||||||||")[0].split("|")[2].replace("|||||||||||||",""));
}
}
read.close();
}else{
System.out.println("找不到指定的文件");
}
}catch(Exceptione){
System.out.println("讀取文件內容出錯");
e.printStackTrace();
}
}
Ⅱ java問題 高手進!
package question;
/**
* @author (暈暈蝦米)
* @version Dec 31, 2010 3:50:04 PM
* Description 原代碼對一元二次方程的計算邏輯有誤。
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class LastOne implements ActionListener {
static JFrame jf;
static Container c;
static JPanel jp1;
static JLabel jl1, jl2, jl3;
static JTextField jtf1, jtf2, jtf3;
static JTextArea jta1;
static JButton jb1;
public LastOne() {
jf = new JFrame("求根公式");
c = jf.getContentPane();
jp1 = new JPanel();
jl1 = new JLabel("二次項系數");
jl2 = new JLabel("一次項系數");
jl3 = new JLabel("常數項系數");
jtf1 = new JTextField(7);
jtf2 = new JTextField(7);
jtf3 = new JTextField(7);
jta1 = new JTextArea(10, 10);
jta1.setFont(new Font("宋體", 0, 12));
jb1 = new JButton("計算");
jb1.addActionListener(this);
c.add(jta1);
c.add(BorderLayout.NORTH, jp1);
jp1.setLayout(new FlowLayout());
jp1.add(jl1);
jp1.add(jtf1);
jp1.add(jl2);
jp1.add(jtf2);
jp1.add(jl3);
jp1.add(jtf3);
jp1.add(jb1);
jf.setSize(600, 200);
jf.setLocation(300, 200);
jf.setVisible(true);
}
public static void main(String args[]) {
new LastOne();
}
public void actionPerformed(ActionEvent ae) {
int x1, x2, tri;
if (ae.getSource() == jb1) {
try {
int a = Integer.parseInt(jtf1.getText());
int b = Integer.parseInt(jtf2.getText());
int c = Integer.parseInt(jtf3.getText());
tri = b * b - 4 * a * c;
x1 = (int) (-b + Math.sqrt(tri)) / 2 * a;
x2 = (int) (-b - Math.sqrt(tri)) / 2 * a;
if (a != 0) {
if (tri > 0) {
jta1.setText(String.valueOf(x1)+", "+String.valueOf(x2));
}
if (tri < 0) {
jta1.setText("沒有實根");
}
if (tri == 0) {
jta1.setText(String.valueOf(x1));
}
} else {
jta1.setText("不是二次方程");
}
} catch (NumberFormatException e) {
jta1.setText("輸入數據格式異常");
}
}
}
}
Ⅲ jta格式怎麼打開
可以不用那個方法,這樣就能用io里的fileinputstream()來作了,是吧?public void ... 我大致知道你的意思應該怎麼作了,你給彈出的button++事件就好
Ⅳ java圖形界面和文件
import java.awt.FileDialog;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
@SuppressWarnings("serial")
public class Experiment extends JFrame implements ActionListener
{
private JMenuBar jb;// 菜單條
private JMenu m1, m2, m3;// 菜單
private JMenuItem i1, i2, ii1, ii2;// 菜單項
private JLabel jl;
private JTextField jt;
private FileDialog fd;
private File file1 = null;
private JTextArea jta1, jta2;
// 一般我們在使用JTextArea,都要加入JScrollPane
private JScrollPane jsp1, jsp2;
// 取得屏幕的寬度
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
// 取得屏幕的高度
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
public Experiment()
{
jb = new JMenuBar();
m1 = new JMenu("文件");
m2 = new JMenu("編輯");
m3 = new JMenu("視圖");
i1 = new JMenuItem("打開");
i2 = new JMenuItem("保存");
ii1 = new JMenuItem("復制");
ii2 = new JMenuItem("粘貼");
jl = new JLabel("文件名");
jt = new JTextField();
jta1 = new JTextArea(20, 15);
jta2 = new JTextArea(20, 15);
jsp1 = new JScrollPane(jta1);
jsp2 = new JScrollPane(jta2);
jl.setBounds(250, 60, 60, 20);
jt.setBounds(310, 60, 150, 20);
jsp1.setBounds(20, 120, 300, 400);
jsp2.setBounds(360, 120, 300, 400);
this.setJMenuBar(jb);
jb.add(m1);
jb.add(m2);
jb.add(m3);
m1.add(i1);
m1.add(i2);
m2.add(ii1);
m2.add(ii2);
this.add(jl);
this.add(jt);
this.add(jsp1);
this.add(jsp2);
i1.addActionListener(this);
i2.addActionListener(this);
// 標題
this.setTitle("實驗7");
// 窗體大小和劇中
this.setBounds((width - 700) / 2, (height - 600) / 2, 700, 600);
// 不允許改變大小
this.setResizable(false);
// 窗口關閉退出程序
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
// 不採用布局
this.setLayout(null);
// 是否顯示
this.setVisible(true);
}
public void actionPerformed(ActionEvent c)
{
// 如果點擊的是i1
if (c.getSource() == i1)
{
fd = new FileDialog(this, "請選擇打開的文件", FileDialog.LOAD);
fd.setVisible(true); // 創建並顯示打開文件對話框
if ((fd.getDirectory() != null) && (fd.getFile() != null))// 路徑和文本內容都不為空
{
jt.setText(fd.getFile());// 在文本框里顯示文件名
try
{
// 以緩沖區方式讀取文件內容
file1 = new File(fd.getDirectory(), fd.getFile());
FileReader fr = new FileReader(file1);
BufferedReader br = new BufferedReader(fr);
String aline;
while ((aline = br.readLine()) != null)
// 按行讀取文本,append方法是追加
jta2.append(aline + "\r\n");
fr.close();
br.close();
} catch (IOException ioe)
{
System.out.println(ioe);
}
}
}
if (c.getSource() == i2)
{
fd = new FileDialog(this, "請選擇保存的路徑", FileDialog.SAVE);
if (file1 == null)
{
fd.setFile("*.txt");
} else
{
fd.setFile(file1.getName());
}
fd.setVisible(true); // 創建並顯示保存文件對話框
if ((fd.getDirectory() != null) && (fd.getFile() != null))
{
file1 = new File(fd.getDirectory(), fd.getFile());
save(file1);
jt.setText(fd.getFile());// 在文本框里顯示文件名
}
}
}
public void save(File file12)
{
try
{
// 將文本區內容寫入字元輸出流
FileWriter fw = new FileWriter(file1);
fw.write(jta1.getText());
fw.close();
} catch (IOException ioe)
{
System.out.println(ioe);
}
}
public static void main(String[] args)
{
new Experiment();
}
}
自己看看吧,復制,粘貼庫里有方法()和paste(),打開和保存,就是輸入流和輸出流的操作,自己去看看就會了
Ⅳ Java 源代碼的編碼問題
//我寫了一個程序,你把文字復制到文本框中點轉碼按鈕,就可以了
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextArea;
public class Class1 extends JFrame {
private final class AT implements ActionListener {
public void actionPerformed(ActionEvent e) {
jta.setText(fixString(jta.getText()));
}
}
public static void main(String[] args) {
JFrame jf = new Class1();
}
JTextArea jta = new JTextArea();
public Class1() {
setSize(400, 400);
setDefaultCloseOperation(EXIT_ON_CLOSE);
JButton jb = new JButton("轉碼");
jb.addActionListener(new AT());
add(jta);
add("North", jb);
setVisible(true);
}
String fixString(String s) {
while (true) {
int index = s.indexOf("\\u");
if (index != -1) {
String s1 = s.substring(index, index + 6);
if (s1.matches("\\\\u[0-9A-F]{4}")) {
char c = (char) Integer.parseInt(s1.replace("\\u", ""), 16);
s = s.substring(0, index) + c + s.substring(index + 6);
}
} else {
break;
}
}
return s;
}
}
Ⅵ 通信技術的問題
第一代通信技術的標準是僅限於語音的蜂窩電話;第二代通信技術其實就是指2G(GSM),標准就是實現了全球移動通話;第三代通信就是指3G(3rd Generation),標准就是實現全球范圍內的無隙漫遊以及能夠處理圖像、音樂、視頻等多種媒體形式。第四代通信技術還在研發中,主要是針對寬頻接入和網路分布,標准就是極大提高了數據數率,實現寬頻多媒體通信。通俗點說,第一代就通信技術就是實現了固話語音通信,第二代通信技術就是實現了移動語音通話,第三代通信技術就是實現了多媒體處理功能,第四代就是對第三代的加強和組建綜合寬頻通信網。我國第四代通信還屬於初步探討階段,沒有什麼實質性的發展。
PS:本人從事通信設計行業時間還不是很長,希望回答能對你有所幫助。
Ⅶ 蛋疼...有個音樂文件,被寫到JTA格式,怎麼打開呢圖片寫到JTA可以用工具打開,可音樂怎麼打開
右鍵音樂文件,
點擊打開方式,
然後選擇一個程序[播放器],
最後確定就可以了。
Ⅷ 誰能給我詳細的解釋一下JNDI,JTA,JMS都是什麼啊
JNDI
Java術語
英文全稱是:Java Naming and Directory Interface
術語解釋:一組幫助做多個命名和目錄服務介面的API。
JNDI(Java Naming and Directory Interface)是SUN公司提供的一種標準的Java命名系統介面,JNDI提供統一的客戶端API,通過不同的訪問提供者介面JNDI SPI的實現,由管理者將JNDI API映射為特定的命名服務和目錄系統,使得Java應用程序可以和這些命名服務和目錄服務之間進行交互。集群JNDI實現了高可靠性JNDI[8],通過伺服器的集群,保證了JNDI的負載平衡和錯誤恢復。在全局共享的方式下,集群中的一個應用伺服器保證本地JNDI樹的獨立性,並擁有全局的JNDI樹。每個應用伺服器在把部署的服務對象綁定到自己本地的JNDI樹的同時,還綁定到一個共享的全局JNDI樹,實現全局JNDI和自身JNDI的聯系。
JNDI(Java Naming and Directory Interface)是一個應用程序設計的API,為開發人員提供了查找和訪問各種命名和目錄服務的通用、統一的介面,類似JDBC都是構建在抽象層上。
JNDI可訪問的現有的目錄及服務有:
DNS、XNam 、Novell目錄服務、LDAP(Lightweight Directory Access Protocol 輕型目錄訪問協議)、 CORBA對象服務、文件系統、Windows XP/2000/NT/Me/9x的注冊表、RMI、DSML v1&v2、NIS。
JNDI優點:
包含了大量的命名和目錄服務,使用通用介面來訪問不同種類的服務;
可以同時連接到多個命名或目錄服務上;
建立起邏輯關聯,允許把名稱同Java對象或資源關聯起來,而不必指導對象或資源的物理ID。
JNDI程序包:
javax.naming:命名操作;
javax.naming.directory:目錄操作;
javax.naming.event:在命名目錄伺服器中請求事件通知;
javax.naming.ldap:提供LDAP支持;
javax.naming.spi:允許動態插入不同實現。
利用JNDI的命名與服務功能來滿足企業級APIs對命名與服務的訪問,諸如EJBs、JMS、JDBC 2.0以及IIOP上的RMI通過JNDI來使用CORBA的命名服務。
JNDI與JDBC:
JNDI提供了一種統一的方式,可以用在網路上查找和訪問服務。通過指定一個資源名稱,該名稱對應於資料庫或命名服務中的一個紀錄,同時返回資料庫連接建立所必須的信息。
代碼示例:
try{
Context cntxt = new InitialContext();
DataSource ds = (DataSource) cntxt.lookup("jdbc/dpt");
}
catch(NamingException ne){
...
}
JNDI與JMS:
消息通信是軟體組件或應用程序用來通信的一種方法。JMS就是一種允許應用程序創建、發送、接收、和讀取消息的JAVA技術。
代碼示例:
try{
Properties env = new Properties();
InitialContext inictxt = new InitialContext(env);
TopicConnectionFactory connFactory = (TopicConnectionFactory) inictxt.lookup("TTopicConnectionFactory");
...
}
catch(NamingException ne){
...
}
訪問特定目錄:舉個例子,人是個對象,他有好幾個屬性,諸如這個人的姓名、電話號碼、電子郵件地址、郵政編碼等屬性。通過getAttributes()方法
Attribute attr =
directory.getAttributes(personName).get("email");
String email = (String)attr.get();
通過使用JNDI讓客戶使用對象的名稱或屬性來查找對象:
foxes = directory.search("o=Wiz,c=US", "sn=Fox", controls);
通過使用JNDI來查找諸如列印機、資料庫這樣的對象,查找列印機的例子:
Printer printer = (Printer)namespace.lookup(printerName);
printer.print(document);
瀏覽命名空間:
NamingEnumeration list = namespace.list("o=Widget, c=US");
while (list.hasMore()) {
NameClassPair entry = (NameClassPair)list.next();
display(entry.getName(), entry.getClassName());
}
參考資料:
http://java.sun.com/procts/jndi/examples.html
http://java.sun.com/procts/jndi/serviceproviders.html
常用的JNDI操作:
常用的JNDI操作:
void bind(String sName,Object object);――綁定:把名稱同對象關聯的過程
void rebind(String sName,Object object);――重新綁定:用來把對象同一個已經存在的名稱重新綁定
void unbind(String sName);――釋放:用來把對象從目錄中釋放出來
void lookup(String sName,Object object);――查找:返回目錄總的一個對象
void rename(String sOldName,String sNewName);――重命名:用來修改對象名稱綁定的名稱
NamingEnumeration listBinding(String sName);――清單:返回綁定在特定上下文中對象的清單列表
NamingEnumeration list(String sName);
代碼示例:重新得到了名稱、類名和綁定對象。
NamingEnumeration namEnumList = ctxt.listBinding("cntxtName");
...
while ( namEnumList.hasMore() ) {
Binding bnd = (Binding) namEnumList.next();
String sObjName = bnd.getName();
String sClassName = bnd.getClassName();
SomeObject objLocal = (SomeObject) bnd.getObject();
}
JTA :
JTA(Java Transaction API) 為 J2EE 平台提供了分布式事務服務。
要用 JTA 進行事務界定,應用程序要調用 javax.transaction.UserTransaction 介面中的方法。例如:
utx.begin();
// ...
DataSource ds = obtainXADataSource();
Connection conn = ds.getConnection();
pstmt = conn.prepareStatement("UPDATE MOVIES ...");
pstmt.setString(1, "Spinal Tap");
pstmt.executeUpdate();
// ...
utx.commit();
讓我們來關注下面的話:
「用 JTA 界定事務,那麼就需要有一個實現 javax.sql.XADataSource 、 javax.sql.XAConnection 和 javax.sql.XAResource 介面的 JDBC 驅動程序。一個實現了這些介面的驅動程序將可以參與 JTA 事務。一個 XADataSource 對象就是一個 XAConnection 對象的工廠。 XAConnection s 是參與 JTA 事務的 JDBC 連接。」
要使用JTA事務,必須使用XADataSource來產生資料庫連接,產生的連接為一個XA連接。
XA連接(javax.sql.XAConnection)和非XA(java.sql.Connection)連接的區別在於:XA可以參與JTA的事務,而且不支持自動提交。
Note:
Oracle, Sybase, DB2, SQL Server等大型資料庫才支持XA, 支持分布事務。
My SQL 連本地都支持不好,更別說分布事務了。
JTA方式的實現過程:
用XADataSource產生的XAConnection它擴展了一個getXAResource()方法,事務通過這個方法把它加入到事務容器中進行管理.對於調用者來說,根本看不到事務是如果管理的,你只要聲明開始事務,告訴容器我下面的操作要求事務參與了,最後告訴事務說到這兒可以提交或回滾了,別的都是黑箱操作。
在使用JTA之前,你必須首先實現一個Xid類用來標識事務(在普通情況下這將由事務管理程序來處理)。Xid包含三個元素:formatID、gtrid(全局事務標識符)和bqual(分支修飾詞標識符)。
下面的例子說明Xid的實現:
import javax.transaction.xa.*;
public class MyXid implements Xid
{
protected int formatId;
protected byte gtrid[];
protected byte bqual[];
public MyXid()
{
}
public MyXid(int formatId, byte gtrid[], byte bqual[])
{
this.formatId = formatId;
this.gtrid = gtrid;
this.bqual = bqual;
}
public int getFormatId()
{
return formatId;
}
public byte[] getBranchQualifier()
{
return bqual;
}
public byte[] getGlobalTransactionId()
{
return gtrid;
}
}
其次,你需要創建一個你要使用的資料庫的數據源:
public DataSource getDataSource()
throws SQLException
{
SQLServerDataSource xaDS = new
com.merant.datadirect.jdbcx.sqlserver.SQLServerDataSource();
xaDS.setDataSourceName("SQLServer");
xaDS.setServerName("server");
xaDS.setPortNumber(1433);
xaDS.setSelectMethod("cursor");
return xaDS;
}
例1?這個例子是用「兩步提交協議」來提交一個事務分支:
XADataSource xaDS;
XAConnection xaCon;
XAResource xaRes;
Xid xid;
Connection con;
Statement stmt;
int ret;
xaDS = getDataSource();
xaCon = xaDS.getXAConnection("jdbc_user", "jdbc_password");
xaRes = xaCon.getXAResource();
con = xaCon.getConnection();
stmt = con.createStatement();
xid = new MyXid(100, new byte[], new byte[]);
try {
xaRes.start(xid, XAResource.TMNOFLAGS);
stmt.executeUpdate("insert into test_table values (100)");
xaRes.end(xid, XAResource.TMSUCCESS);
ret = xaRes.prepare(xid);
if (ret == XAResource.XA_OK) {
xaRes.commit(xid, false);
}
}
catch (XAException e) {
e.printStackTrace();
}
finally {
stmt.close();
con.close();
xaCon.close();
}
當然,實際過程中,我們不需要寫這些代碼,這些代碼是JTA最終的實現代碼。
關於「兩步提交協議」,可以參看下面的文章:
http://www.jspcn.net/htmlnews/11049371131251752.html
http://www.vermicelli.pasta.cs.uit.no/ipv6/students/andrer/doc/html/node18.html
選擇最好的方式
用 JDBC API 進事務界定來構建 DAO 類的。這些 DAO 類可以總結如下:
事務界定代碼嵌入在 DAO 類中。
DAO 類使用 JDBC API 進行事務界定。
調用者不能界定事務。
事務范圍局限於單個 JDBC 連接。
JDBC 事務並不總是適合復雜的企業應用程序。如果您的事務要跨越多個 DAO 或者多個資料庫,那麼下列實現策略也許更合適:
事務用 JTA 界定。
事務界定代碼從 DAO 中分離出來。
調用者負責界定事務。
DAO 加入一個全局事務。
JDBC 方式由於其簡單性而具有吸引力,JTA 方式提供了更大的靈活性。您所選擇的實現將取決於應用程序的特定需求。
XADataSource例子:
<?xml version="1.0" encoding="UTF-8"?>
<!-- ===================================================================== -->
<!-- -->
<!-- JBoss Server Configuration -->
<!-- Thanks to Horia Muntean <[email protected]> -->
<!-- ===================================================================== -->
<!-- $Id: db2-xa-ds.xml,v 1.1.2.1 2003/05/30 18:25:57 d_jencks Exp $ -->
<datasources>
<!--
XADatasource for DB2 V8.1 (app driver)
$db2_install_dir/java/db2java.zip into $jboss_install_dir/server/default/lib
-->
<xa-datasource>
<jndi-name>DB2XADS</jndi-name>
<xa-datasource-class>COM.ibm.db2.jdbc.DB2XADataSource</xa-datasource-class>
<xa-datasource-property name="DatabaseName">yout_database_name</xa-datasource-property>
<xa-datasource-property name="User">your_user</xa-datasource-property>
<xa-datasource-property name="Password">your_password</xa-datasource-property>
</xa-datasource>
</datasources>
JMS:
JMS(Java Messaging Service)是Java平台上有關面向消息中間件的技術規范,翻譯為Java消息服務。JMS支持點對點和發布/訂閱兩種消息模型。
JMS基本概念
1.JMS(Java Message Service)是訪問企業消息系統的標准API,它便於消息系
統中的Java應用程序進行消息交換,並且通過提供標準的產生、發送、接收消息的介面簡化企業應用的開發。
2. JMS基本功能
JMS是用於和面向消息的中間件相互通信的應用程序介面。它既支持點對點(point-to-point)的域,又支持發布/訂閱(publish/subscribe)類型的域,並且提供對下列類型的支持:經認可的消息傳遞,事務型消息的傳遞,一致性消息和具有持久性的訂閱者支持。JMS還提供了另一種方式來對您的應用與舊的後台系統相集成。
3. WebLogic JMS Server介紹
WebLogic Server8.1符合JAVA規范,並通過Sun Microsystems J2EE 1.3認
證.作為WebLogic的一部分,當然WebLogic JMS Server也完全遵從JMS規范,還支持集群,並可以應用於實際企業系統.下圖是WebLogic JMS Server體系結構.圖中可以看到WebLogic JMS Server主要組件有: WebLogic JMS servers(用於消息通信),Java客戶端,JNDI(用於域名查找), 後備存儲(用於持久消息存儲,基於文件或者JDBC資料庫).
WebLogic JMS特性
1. 消息通信模型
JMS 支持兩種消息通信模型:點到點(point-to-point)(PTP)模型和發布/訂閱(Pub/Sub)模型。除了下列不同之外,這兩種消息通信模型非常地相似:
PTP 模型規定了一個消息只能有一個接收者;Pub/Sub 模型允許一個消息可以有多個接收者。
2. 消息組成
消息傳遞系統的中心就是消息。
一條 Message 分為三個組成部分:
· 頭(header)是個標准欄位集,客戶機和供應商都用它來標識和路由消息。
· 屬性(property)支持把可選頭欄位添加到消息。如果您的應用程序需要不使用標准頭欄位對消息編目和分類,您就可以添加一個屬性到消息以實現這個編目和分類。提供 set<Type>Property(...) 和 get<Type>Property(...) 方法以設置和獲取各種 Java 類型的屬性,包括 Object。JMS 定義了一個供應商選擇提供的標准屬性集。
· 消息的主體(body)包含要發送給接收應用程序的內容。每個消息介面特定於它所支持的內容類型。
JMS 為不同類型的內容提供了它們各自的消息類型,但是所有消息都派生自 Message 介面。
· StreamMessage:包含 Java 基本數值流,用標准流操作來順序的填充和讀取。
· MapMessage:包含一組名/值對;名稱為 string 類型,而值為 Java 的基本類型。
· TextMessage:包含一個 String。
· ObjectMessage:包含一個 Serializable Java 對象;能使用 JDK 的集合類。
· BytesMessage:包含未解釋位元組流: 編碼主體以匹配現存的消息格式。
· XMLMessage: 包含XML內容。擴展TextMessage,XMLMessage 類型的使用,使得消息過濾非常便利。
3. 消息確認模式
非事務性會話中,應用程序創建的會話有5 種確認模式,而在事務性會話中,確認模式被忽略。
五種確認模式說明:
· AUTO_ACKNOWLEDGE:自動確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收。
· CLIENT_ACKNOWLEDGE:客戶端確認模式。會話對象依賴於應用程序對被接收的消息調用一個acknowledge()方法。一旦這個方法被調用,會話會確認最後一次確認之後所有接收到的消息。這種模式允許應用程序以一個調用來接收,處理並確認一批消息。注意:在管理控制台中,如果連接工廠的Acknowledge Policy(確認方針)屬性被設置為"Previous"(提前),但是你希望為一個給定的會話確認所有接收到的消息,那麼就用最後一條消息來調用acknowledge()方法。
· DUPS_OK_ACKNOWLEDGE:允許副本的確認模式。一旦接收方應用程序的方法調用從處理消息處返回,會話對象就會確認消息的接收;而且允許重復確認。在需要考慮資源使用時,這種模式非常有效。注意:如果你的應用程序無法處理重復的消息的話,你應該避免使用這種模式。如果發送消息的初始化嘗試失敗,那麼重復的消息可以被重新發送。
· NO_ACKNOWLEDGE:不確認模式。不確認收到的消息是需要的。消息發送給一個NO_ACKNOWLEDGE 會話後,它們會被WebLogic 伺服器立即刪除。在這種模式下,將無法重新獲得已接收的消息,而且可能導致下面的結果:1. 消息可能丟失;和(或者)另一種情況:2. 如果發送消息的初始化嘗試失敗,會出現重復消息被發送的情況。
· MULTICAST_NO_ACKNOWLEDGE:IP組播下的不確認模式,同樣無需確認。發送給一個MULTICAST_NO_ACKNOWLEDGE會話的消息, 會共享之前所述的NO_ACKNOWLEDGE 確認模式一樣的特徵。這種模式支持希望通過IP 組播方式進行消息通信的應用程序,而且無需依賴會話確認提供的服務質量。注意:如果你的應用程序無法處理消息的丟失或者重復,那麼你應該避免使用這種模式。如果發送消息的初始化嘗試失敗的話,重復的消息可能會被再次發送。
註:在上表的5 種確認模式中,AUTO_ACKNOWLEDGE ,DUPS_OK_ACKNOWLEDGE 和
CLIENT_ACKNOWLEDGE 是JMS 規范定義的,NO_ACKNOWLEDGE 和MULTICAST_NO_ACKNOWLEDGE是WebLogic JMS 提供的。
參考資料:Roslin http://www.mldn.cn/articleview/2007-1-16/article_view_854.htm
Ⅸ public void actionPerformed(ActionEvent e){
你那幾個變數定義在哪了??
你必須定義成類變數,才可以在方法中調用。