??xml version="1.0" encoding="utf-8" standalone="yes"?>久久成人综合视频,桥本有菜亚洲精品av在线,欧美成人明星100排名http://www.aygfsteel.com/alvin/category/16873.html大菜鸟,每天要自强!zh-cnSun, 22 May 2011 18:34:16 GMTSun, 22 May 2011 18:34:16 GMT60从千千静听的歌词服务器查询音乐的 LRC 歌词 [Java]http://www.aygfsteel.com/alvin/archive/2011/05/02/java-ttplayer-lrc-get.html林志?/dc:creator>林志?/author>Mon, 02 May 2011 08:50:00 GMThttp://www.aygfsteel.com/alvin/archive/2011/05/02/java-ttplayer-lrc-get.htmlhttp://www.aygfsteel.com/alvin/comments/349387.htmlhttp://www.aygfsteel.com/alvin/archive/2011/05/02/java-ttplayer-lrc-get.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/349387.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/349387.html.....  阅读全文

]]>
[导入]Java 农历http://www.aygfsteel.com/alvin/archive/2008/12/30/249045.html林志?/dc:creator>林志?/author>Mon, 29 Dec 2008 19:17:00 GMThttp://www.aygfsteel.com/alvin/archive/2008/12/30/249045.htmlhttp://www.aygfsteel.com/alvin/comments/249045.htmlhttp://www.aygfsteel.com/alvin/archive/2008/12/30/249045.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/249045.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/249045.html 下面是利用此cd的一个月历例?

源文?点击下蝲
文章来源:  http://www.ialvin.cn/blog/article-150.xml

]]>
[导入]?JSP 论坛源码http://www.aygfsteel.com/alvin/archive/2008/12/30/249042.html林志?/dc:creator>林志?/author>Mon, 29 Dec 2008 19:17:00 GMThttp://www.aygfsteel.com/alvin/archive/2008/12/30/249042.htmlhttp://www.aygfsteel.com/alvin/comments/249042.htmlhttp://www.aygfsteel.com/alvin/archive/2008/12/30/249042.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/249042.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/249042.html 又一个课E设?单的 JSP 论坛
功能较简单的那种, 界面上模仿了 Discuz
JSP 本来学的不? 只是量实现?MVC

源码下蝲:http://www.iscripts.org/bbs/viewthread.php?tid=87


文章来源:http://www.iscripts.org/bbs/viewthread.php?tid=87



]]>
JTree使用l验ȝhttp://www.aygfsteel.com/alvin/archive/2007/10/16/153137.html林志?/dc:creator>林志?/author>Mon, 15 Oct 2007 20:11:00 GMThttp://www.aygfsteel.com/alvin/archive/2007/10/16/153137.htmlhttp://www.aygfsteel.com/alvin/comments/153137.htmlhttp://www.aygfsteel.com/alvin/archive/2007/10/16/153137.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/153137.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/153137.html......

在实际开发过E中?x)经怋用JTreelgQ^时会(x)遇到q样或那L(fng)问题Q在此将偶得一点经验写下来Q与大家׃nQ希望对大家有所帮助?nbsp; 阅读全文

]]>
利用U真IP数据?通过IP查地址[JAVA]http://www.aygfsteel.com/alvin/archive/2007/08/23/141139.html林志?/dc:creator>林志?/author>Thu, 23 Aug 2007 06:58:00 GMThttp://www.aygfsteel.com/alvin/archive/2007/08/23/141139.html
E序代码 E序代码
package alvin;
import java.io.*;

public class QQWry {
    private String DbPath = "F:\\DB\\QQWry2.Dat";    //U真IP数据库地址
    private String Country, LocalStr;
    private long IPN;
    private int RecordCount, CountryFlag;
    private long RangE, RangB, OffSet, StartIP, EndIP, FirstStartIP, LastStartIP, EndIPOff;
    private RandomAccessFile fis;
    private byte[] buff;
    
    private long B2L(byte[] b) {
        long ret = 0;
        for (int i=0; i<b.length; i++) {
            long t = 1L;
            for (int j=0; j<i; j++) t = t * 256L;
            ret += ((b[i]<0)?256+b[i]:b[i]) * t;
        }
        return ret;
    }
    
    private long ipToInt(String ip) {
        String[] arr = ip.split("\\.");
        long ret = 0;
        for (int i=0; i<arr.length; i++) {
            long l = 1;
            for (int j=0; j<i; j++) l *= 256;
            try {
                ret += Long.parseLong(arr[arr.length-i-1]) * l;
            } catch (Exception e) {
                ret += 0;
            }
        }
        return ret;
    }
    
    public void seek(String ip) throws Exception {
        this.IPN = ipToInt(ip);
        fis = new RandomAccessFile(this.DbPath, "r");
        buff = new byte[4];
        fis.seek(0);
        fis.read(buff);
        FirstStartIP = this.B2L(buff);
        fis.read(buff);
        LastStartIP = this.B2L(buff);
        RecordCount = (int)((LastStartIP - FirstStartIP) / 7);
        if (RecordCount <= 1) {
            LocalStr = Country = "未知";
            throw new Exception();
        }
        
        RangB = 0;
        RangE = RecordCount;
        long RecNo;
        
        do {
            RecNo = (RangB+RangE)/2;
            getStartIP(RecNo);
            if (IPN == StartIP) {
               RangB = RecNo;
               break;
            }
            if (IPN > StartIP)
                RangB = RecNo;
            else
                RangE = RecNo;
        } while (RangB < RangE-1);
        
        getStartIP(RangB);
        getEndIP();
        getCountry(IPN);
        
        fis.close();
    }

    private String getFlagStr(long OffSet) throws IOException {
        int flag = 0;
        do {
            fis.seek(OffSet);
            buff = new byte[1];
            fis.read(buff);
            flag = (buff[0]<0)?256+buff[0]:buff[0];
            if (flag==1 || flag==2 ) {
                buff = new byte[3];
                fis.read(buff);
                if (flag == 2) {
                    CountryFlag = 2;
                    EndIPOff = OffSet-4;
                }
                OffSet = this.B2L(buff);
            } else
                break;
        } while (true);
        
        if (OffSet < 12) {
            return "";
        } else {
            fis.seek(OffSet);
            return getStr();
        }
    }
    
    private String getStr() throws IOException {
        long l = fis.length();
        ByteArrayOutputStream byteout = new ByteArrayOutputStream();
        byte c  = fis.readByte();
        do {
            byteout.write(c);
            c = fis.readByte();
        } while (c!=0 && fis.getFilePointer() < l);
        return byteout.toString();
    }
    
    private void getCountry(long ip) throws IOException {
        if (CountryFlag == 1 || CountryFlag == 2) {
            Country = getFlagStr(EndIPOff+4);
            if (CountryFlag == 1) {
                LocalStr = getFlagStr(fis.getFilePointer());
                if (IPN >= ipToInt("255.255.255.0") && IPN <= ipToInt("255.255.255.255")) {
                    LocalStr = getFlagStr(EndIPOff + 21);
                    Country = getFlagStr(EndIPOff + 12);
                }
            } else {
                LocalStr = getFlagStr(EndIPOff+8);
            }
        } else {
            Country = getFlagStr(EndIPOff + 4);
            LocalStr = getFlagStr(fis.getFilePointer());
        }
    }
    
    private long getEndIP() throws IOException {
        fis.seek(EndIPOff);
        buff = new byte[4];
        fis.read(buff);
        EndIP = this.B2L(buff);
        buff = new byte[1];
        fis.read(buff);
        CountryFlag = (buff[0]<0)?256+buff[0]:buff[0];
        return EndIP;
    }
    
    private long getStartIP(long RecNo) throws IOException {
        OffSet = FirstStartIP + RecNo * 7;
        fis.seek(OffSet);
        buff = new byte[4];
        fis.read(buff);
        StartIP = this.B2L(buff);
        buff = new byte[3];
        fis.read(buff);
        EndIPOff = this.B2L(buff);
        return StartIP;
    }
    
    public String getLocal() { return this.LocalStr; }
    public String getCountry() { return this.Country; }
    public void setPath(String path) { this.DbPath = path; }
    
    public static void main(String[] args) throws Exception {
        QQWry w = new QQWry();
        //w.setPath(new File("QQWry2.Dat").getAbsolutePath());
        w.seek("59.39.253.251");
        System.out.println(w.getCountry() + " " + w.getLocal());
    }

}


U真IP库下载地址? http://www.ialvin.cn/blog/article.asp?id=135
IP库大? 6M?br />
如有问题,请到http://www.ialvin.cn/blog/article.asp?id=135提出

]]>
常用数据库JDBCq接写法http://www.aygfsteel.com/alvin/archive/2007/07/18/131618.html林志?/dc:creator>林志?/author>Wed, 18 Jul 2007 15:56:00 GMThttp://www.aygfsteel.com/alvin/archive/2007/07/18/131618.htmlhttp://www.aygfsteel.com/alvin/comments/131618.htmlhttp://www.aygfsteel.com/alvin/archive/2007/07/18/131618.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/131618.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/131618.html常用数据库JDBCq接写法
Z方便大家查找Q整理内容如下:(x)
1. MySQL(http://www.mysql.com)mm.mysql-2.0.2-bin.jar
Class.forName( "org.gjt.mm.mysql.Driver" );
cn = DriverManager.getConnection( "jdbc:mysql://MyDbComputerNameOrIP:3306/myDatabaseName", sUsr, sPwd );

2. PostgreSQL(http://www.de.postgresql.org)pgjdbc2.jar
Class.forName( "org.postgresql.Driver" );
cn = DriverManager.getConnection( "jdbc:postgresql://MyDbComputerNameOrIP/myDatabaseName", sUsr, sPwd );

3. oracle(http://www.oracle.com/ip/deploy/database/oracle9i/)classes12.zip
Class.forName( "oracle.jdbc.driver.OracleDriver" );
cn = DriverManager.getConnection( "jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL", sUsr, sPwd );

4. Sybase(http://jtds.sourceforge.net)jconn2.jar
Class.forName( "com.sybase.jdbc2.jdbc.SybDriver" );
cn = DriverManager.getConnection( "jdbc:sybase:Tds:MyDbComputerNameOrIP:2638", sUsr, sPwd );
//(Default-Username/Password: "dba"/"sql")

5. Microsoft SQLServer(http://jtds.sourceforge.net)
Class.forName( "net.sourceforge.jtds.jdbc.Driver" );
cn = DriverManager.getConnection( "jdbc:jtds:sqlserver://MyDbComputerNameOrIP:1433/master", sUsr, sPwd );

6. Microsoft SQLServer(http://www.microsoft.com)
Class.forName( "com.microsoft.jdbc.sqlserver.SQLServerDriver" );
cn = DriverManager.getConnection( "jdbc:microsoft:sqlserver://MyDbComputerNameOrIP:1433;databaseName=master", sUsr, sPwd );

7. ODBC
Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
Connection cn = DriverManager.getConnection( "jdbc:odbc:" + sDsn, sUsr, sPwd );

8.DB2(新添?
Class.forName("com.ibm.db2.jdbc.net.DB2Driver");
String url="jdbc:db2://192.9.200.108:6789/SAMPLE"
cn = DriverManager.getConnection( url, sUsr, sPwd );

9.Microsoft SQL Server series (6.5, 7.x and 2000) and Sybase 10

JDBC Name: jTDS
URL: http://jtds.sourceforge.net/
Version: 0.5.1
Download URL: http://sourceforge.net/project/showfiles.php?group_id=33291

语法:
Class.forName("net.sourceforge.jtds.jdbc.Driver ");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://host:port/database","user","password");
or
Connection con = DriverManager.getConnection("jdbc:jtds:sybase://host:port/database","user","password");

10.Postgresql
JDBC Name: PostgreSQL JDBC
URL: http://jdbc.postgresql.org/
Version: 7.3.3 build 110
Download URL: http://jdbc.postgresql.org/download.html
语法:
Class.forName("org.postgresql.Driver");
Connection con=DriverManager.getConnection("jdbc:postgresql://host:port/database","user","password");

11.IBM AS400L在用的JDBC语法
有装V4R4以上版本的Client Access Express
可以在C:\Program Files\IBM\Client Access\jt400\lib
扑ֈ driver 档案 jt400.zipQƈ更改扩展名成?jt400.jar
语法:
java.sql.DriverManager.registerDriver (new com.ibm.as400.access.AS400JDBCDriver ());
Class.forName("com.ibm.as400.access.AS400JDBCConnection");
con = DriverManager.getConnection("jdbc:as400://IP","user","password");

12.informix
Class.forName("com.informix.jdbc.IfxDriver").newInstance();
String url =
"jdbc:informix-sqli://123.45.67.89:1533/testDB:INFORMIXSERVER=myserver;
user=testuser;password=testpassword";
LibQjdbcdrv.zip<br><br>Class.forName( "com.sybase.jdbc.SybDriver" )
url="jdbc:sybase:Tds:127.0.0.1:2638/asademo";
SybConnection connection= (SybConnection)DriverManager.getConnection(url,"dba","sql");

13.SAP DB
Class.forName ("com.sap.dbtech.jdbc.DriverSapDB");
java.sql.Connection connection = java.sql.DriverManager.getConnection ( "jdbc:sapdb://" + host + "/" + database_name,user_name, password)

14.InterBase
String url = "jdbc:interbase://localhost/e:/testbed/database/employee.gdb";
Class.forName("interbase.interclient.Driver");
//Driver d = new interbase.interclient.Driver (); /* this will also work if you do not want the line above */
Connection conn = DriverManager.getConnection( url, "sysdba", "masterkey" );

15.HSqlDB
url:     http://hsqldb.sourceforge.net/
driver:  org.hsqldb.jdbcDriver
q接方式?U,分别为:(x)
con-strQ内存): jdbc:hsqldb.
con-strQ本圎ͼ: jdbc:hsqldb:/path/to/the/db/dir
con-strQhttpQ? jdbc:hsqldb:http://dbsrv
con-strQhsqlQ? jdbc:hsqldb:hsql://dbsrv
文章来源:http://www.pkpk.org/blog/default.asp?id=56

]]>
一个被老师批的半死的课E设?图书理pȝhttp://www.aygfsteel.com/alvin/archive/2007/07/06/128693.html林志?/dc:creator>林志?/author>Fri, 06 Jul 2007 14:45:00 GMThttp://www.aygfsteel.com/alvin/archive/2007/07/06/128693.htmlhttp://www.aygfsteel.com/alvin/comments/128693.htmlhttp://www.aygfsteel.com/alvin/archive/2007/07/06/128693.html#Feedback1http://www.aygfsteel.com/alvin/comments/commentRss/128693.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/128693.html 本来是用 VB 实现,周三?差不多搞?老师说用 VB 太简?br /> 改用?Java 通宵?JBuider ?Eclipse 下干完这?没想到收货时却被老师l批了个半死. ?郁闷!!!

下蝲文g 点击下蝲源文?/a>

]]>
俄罗斯方?/title><link>http://www.aygfsteel.com/alvin/archive/2007/04/15/110741.html</link><dc:creator>林志?/dc:creator><author>林志?/author><pubDate>Sun, 15 Apr 2007 01:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/alvin/archive/2007/04/15/110741.html</guid><wfw:comment>http://www.aygfsteel.com/alvin/comments/110741.html</wfw:comment><comments>http://www.aygfsteel.com/alvin/archive/2007/04/15/110741.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alvin/comments/commentRss/110741.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alvin/services/trackbacks/110741.html</trackback:ping><description><![CDATA[     摘要: 昨天看同学在做俄|斯方块,自己心痒痒的也想做个,费了?ji)牛二虎之?才写了这么个单的 Applet ?l箋努力,争取快完善.  <a href='http://www.aygfsteel.com/alvin/archive/2007/04/15/110741.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alvin/aggbug/110741.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alvin/" target="_blank">林志?/a> 2007-04-15 09:45 <a href="http://www.aygfsteel.com/alvin/archive/2007/04/15/110741.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>数据库存储图?[JAVA]http://www.aygfsteel.com/alvin/archive/2007/03/30/107368.html林志?/dc:creator>林志?/author>Thu, 29 Mar 2007 16:30:00 GMThttp://www.aygfsteel.com/alvin/archive/2007/03/30/107368.htmlhttp://www.aygfsteel.com/alvin/comments/107368.htmlhttp://www.aygfsteel.com/alvin/archive/2007/03/30/107368.html#Feedback5http://www.aygfsteel.com/alvin/comments/commentRss/107368.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/107368.html前两天一|友问题怎么?才去查一下资?试验了一?nbsp; 阅读全文

]]>
?JNI 浏览器嵌入 AWT lg?/title><link>http://www.aygfsteel.com/alvin/archive/2007/03/06/102266.html</link><dc:creator>林志?/dc:creator><author>林志?/author><pubDate>Tue, 06 Mar 2007 13:45:00 GMT</pubDate><guid>http://www.aygfsteel.com/alvin/archive/2007/03/06/102266.html</guid><wfw:comment>http://www.aygfsteel.com/alvin/comments/102266.html</wfw:comment><comments>http://www.aygfsteel.com/alvin/archive/2007/03/06/102266.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alvin/comments/commentRss/102266.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alvin/services/trackbacks/102266.html</trackback:ping><description><![CDATA[     摘要: ?SunKing's Blog 看到q他写的一个程序,是?WebBrowser 嵌入 AWT 。看了之后很喜欢Q可惜他不公开 C 代码?<br>Z跟他一样做L(fng)效果Q搜遍了|上?VC++ 资料Q自己做了这么个东东出来了。感觉还不错Q在自己的机上测试过?nbsp; <a href='http://www.aygfsteel.com/alvin/archive/2007/03/06/102266.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alvin/aggbug/102266.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alvin/" target="_blank">林志?/a> 2007-03-06 21:45 <a href="http://www.aygfsteel.com/alvin/archive/2007/03/06/102266.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>通过 JNI ?JAVA ?Delphi E序交互(?http://www.aygfsteel.com/alvin/archive/2006/12/13/87371.html林志?/dc:creator>林志?/author>Tue, 12 Dec 2006 18:20:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/12/13/87371.htmlhttp://www.aygfsteel.com/alvin/comments/87371.htmlhttp://www.aygfsteel.com/alvin/archive/2006/12/13/87371.html#Feedback4http://www.aygfsteel.com/alvin/comments/commentRss/87371.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/87371.html通过 JNI ?JAVA ?Delphi E序交互(?

之前,我们学了如何?Java 调用 Delphi E序的一个方?br />如果在Delphi E序在适当时候需要调?Java E序,又要怎么做呢?

首先,我们先定义如下的 Java c?

//------------------------------------------------------------------------------
package alvinJNI;

class HelloWorld {
        static {
                System.loadLibrary("DelphiAction");
        }
        String str = "你好";
       
        public native void callPrintText(HelloWorld hw);
 
        public void printText(String arg) {
                System.out.println(arg);
        }
       
        public static void main(String[] args) {
                HelloWorld hw = new HelloWorld();
                hw.callPrintText(hw);
        }

}
//-------------------------------------------------------------------------------

我们再像上次一样在 Delphi 中徏?DLL 工程,写下面的代码(有注?:

//-------------------------------------------------------------------------------
library DelphiAction;

uses
  JNI;

//今天的这个程序稍微的复杂一?因ؓ(f)要调?Java 对象的方?在这里可以学到对 JObject 的操?br />procedure Java_alvinJNI_HelloWorld_callPrintText(PEnv: PJNIEnv; Obj: JObject; arg: JObject); stdcall;
var
  JVM: TJNIEnv;
  c: JClass;  //cID
  fid: JFieldID;  //属性ID
  mid: JMethodID;  //Ҏ(gu)ID
  tmpStr: JString;
  javaargs : array[0..0] of JValue; //调用Ҏ(gu)时的参数
begin
  JVM := TJNIEnv.Create(PEnv);

  {我们先来看下如何获得一个对象的某个属性值}
  {----------------------------------------}
  {我们?Java 对象的操作要选获取这个对象的 ClassID,我们可以用下面的Ҏ(gu)来取?}
  c := JVM.GetObjectClass(arg);

  {我们先来获取参数 HelloWorld arg 对象?String str q个属性的?br />   q里我们先要获得q个属性在它所在类中的属?ID }
  fid := JVM.GetFieldID(c, 'str', 'Ljava/lang/String;');
  {上面调用的这个方法中的参数分别是: 所属类ID, 属性名, 属性类型签?br />   关于属性类型的{֐,在下面 '说明1' l出}

  {下面,我们可以根?属性ID 来获取属性g, q里我们?x)取得?arg.str q个字符串}
  tmpStr := JVM.GetObjectField(arg, fid);
  {上面的这?JVM.GetObjectField(arg, fid) 用来获取属性?br />   参数分别? 要取得其属性的对象, 要取得的属性的属性ID
   q里取得的是一?Java ?String 对象,?JString,其实它也是 JObject cd的}
  writeln('Delphi 输出? ' + JVM.UnicodeJStringToString(tmpStr));

 


  {我们再来看下如何调用一?JObject 的方? q里我们要调用的?arg.printText() q个Ҏ(gu)}
  {------------------------------------------------------------------------------------}
  //我们q是要用C面的那个 cID: c.
  //q一ơ我们要取得q个Ҏ(gu)?Ҏ(gu)ID
  mid := JVM.GetMethodID(c, 'printText', '(Ljava/lang/String;)V');
  //上面调用的这个方法中的参数分别是: 所属类ID, Ҏ(gu)? Ҏ(gu)(参数+q回?cd{֐
  //关于Ҏ(gu)(参数+q回?cd的签?在下面 '说明2' l出

  //有了 Ҏ(gu)ID 后我们就可以用这个ID来调用这个方法了,我们q里要调用的Ҏ(gu)? arg.printText(参数);
  //因ؓ(f)我们要调用的q个Ҏ(gu)有参? 调用 Java Ҏ(gu)的时候如果有参数,要徏立参数数l?q里我们来建立数组
  javaargs[0].l := tmpStr;
  {q里q个 javaargs ?JValue cd. 它有点特D?它的用法在下?说明3 l出}

  {有了 c象, Ҏ(gu)ID, 参数. 下面我们可以调?arg.printText(javaargs) q个Ҏ(gu)?使用下面q个Ҏ(gu)可实现}
  JVM.CallObjectMethodA(arg, mid, @javaargs);

  JVM.Free;
end;

exports
        Java_alvinJNI_HelloWorld_callPrintText;
end.

//--------------------------------------------------------------------------------

到这?我们已经可以?Delphi 中获?Java 对象的属性了, q可以调用一?Java 对象的方?是不是很酷呢?
你学C?


###########################说明1###############################
现在,我们q要再了解一个获?"属性ID" 时的那个{֐
上面例子? fid := JVM.GetFieldID(c, 'str', 'Ljava/lang/String;'); 用的{֐? 'Ljava/lang/String;'
因ؓ(f)刚刚要获得的属性是 java.lang.String cd?所以它的签名是: 'Ljava/lang/String;'
如果,我们要获得的属性是其它cd,获取 属性ID 时又要怎样{֐?下面l出一个对照表

byte -- B
char --- C
double -- D
float -- F
int -- I
long -- J (注意Q是J不是L)
short -- S
void -- V
boolean - ZQ注意:(x)是Z不是BQ?br />class(cd象类? - 'L'+完整cd+';'  (包\径分隔符? '/'.   如上面例子中?String 对型, {֐? 'Ljava/lang/String;')

数组 type[] -- '['+type (例如 float[] 的签名就?'[float')
(如果是二l数l,如float[][]Q则{֐?'[[float')


############################说明2###############################
现在,我们q要再了解一个获?"Ҏ(gu)ID" 时的那个{֐
上面例子? mid := JVM.GetMethodID(c, 'printText', '(Ljava/lang/String;)V'); 用的{֐? '(Ljava/lang/String;)V'
Ҏ(gu)ID 的签?分ؓ(f)两部?br />一部分是前面括号中?是参数类型的{֐
另一部分是括号后?是返回值类型的{֐
其中某个{数与返回值的cd{֐与获取属性ID时的{֐是一L(fng)
上面要调用的Ҏ(gu)只有一个参?如果有多个参数时又怎样?

? int getInt(long a, double b); q样?Java Ҏ(gu)要这L(fng)? '(JD)I'
(注意:参数{֐是连l的,没有分隔W? q里W一个参?long {֐?J, W二个参数签名ؓ(f): D, q回值类?int {֐? I)
说到q里,怿大家都会(x)使用q个{֐?/p>


############################说明3###############################
在调用一?Java Ҏ(gu)? 如果q个Ҏ(gu)有参? 我们p传递一个参数数l的地址l?Java
现在,我们q要再了解如何创L(fng)一个参数数l?br />传递给 Java Ҏ(gu)的参?cd均ؓ(f) JValue. 它是一个packed record


如果,我们要调用的Ҏ(gu) void myMethod(int a, long b, String c); ?3 个参?br />那么
1.我们先要声明如下数组:
var
  args : array[0..1] of JValue;
2.l数l赋?br />  args[0].i := 100;
  args[1].j := 100;
  args[2].l := JVM.StringToJString(pchar(UTF8Encode('雅林|络 )));
3.调用
  JVM.CallVoidMethodA(Java对象, Ҏ(gu)ID, @args);

JValue 是一?packed record,它的定义如下:
  JValue = packed record
  case Integer of
    0: (z: JBoolean);
    1: (b: JByte   );
    2: (c: JChar   );
    3: (s: JShort  );
    4: (i: JInt    );
    5: (j: JLong   );
    6: (f: JFloat  );
    7: (d: JDouble );
    8: (l: JObject );
  end;

调用Ҏ(gu)?TJNIEnv q有:
    CallObjectMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JObject; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallBooleanMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JBoolean; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallByteMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JByte; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallCharMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JChar; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallShortMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JShort; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallIntMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JInt; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallLongMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JLong; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallFloatMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JFloat; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallDoubleMethodA: function(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue): JDouble; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallVoidMethodA: procedure(Env: PJNIEnv; Obj: JObject; MethodID: JMethodID; Args: PJValue); {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualObjectMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JObject; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualBooleanMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JBoolean; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualByteMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JByte; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualCharMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JChar; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualShortMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JShort; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualIntMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JInt; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualLongMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JLong; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualFloatMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JFloat; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualDoubleMethodA: function(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue): JDouble; {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}
    CallNonvirtualVoidMethodA: procedure(Env: PJNIEnv; Obj: JObject; AClass: JClass; MethodID: JMethodID; Args: PJValue); {$IFDEF MSWINDOWS} stdcall; {$ENDIF} {$IFDEF LINUX} cdecl; {$ENDIF}


好了,到这?怿大家对做 Delphi ?JNI 已有一定的了解
关于 Delphi JNI 的话题就先说到这?br />如果有兴?大家可以打开 jni.pas 了解更多



]]>
通过 JNI ?JAVA ?Delphi E序交互(?http://www.aygfsteel.com/alvin/archive/2006/12/11/87084.html林志?/dc:creator>林志?/author>Mon, 11 Dec 2006 15:13:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/12/11/87084.htmlhttp://www.aygfsteel.com/alvin/comments/87084.htmlhttp://www.aygfsteel.com/alvin/archive/2006/12/11/87084.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/87084.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/87084.html通过 JNI ?JAVA ?Delphi E序交互(?

在上一中,我们说了如何?Java 调用 Delphi E序的一个方法ƈ传递给其一个参?br />现在我们再来看一下如果如果要调用的方法有q回?又要怎么?


首先,我们先定义如下的 Java c?

//------------------------------------------------------------------------------
package alvinJNI;

class HelloWorld {
        static {
                System.loadLibrary("DelphiAction");
        }

        public native String printText(String arg);

        public static void main(String[] args) {
                HelloWorld hw = new HelloWorld();
                System.out.println(hw.printText("你好"));
        }

}
//-------------------------------------------------------------------------------

我们再像上次一样在 Delphi 中徏?DLL 工程,写下面的代码(有注?:

//-------------------------------------------------------------------------------
library DelphiAction;

uses
  JNI;

//今天,因ؓ(f)q个Ҏ(gu)有返回?所以不再是 procedure q程,我们要变?function 函数, q回值类型ؓ(f) JString
function Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; arg: JString): JString; stdcall;
var
  tmpStr: String;
  JVM: TJNIEnv;
  tt: Boolean;
begin
  JVM:= TJNIEnv.Create(PEnv);

  //我们q里先把参数提交q来?JString 转换?Delphi 中的 String 后就可以使用?br />  tmpStr := '你想输出的字W串? "' + JVM.UnicodeJStringToString(arg) + '"?;

  //当字W串要{换成 JString 我们需要先对字W串q行 UTF8 ~码后再转换?PChar 再{换成 JString
  //q样才能保证q回的字W串?JAVA 中不q
  Result := JVM.StringToJString(pchar(UTF8Encode(tmpStr)));
  JVM.Free;
end;

exports
        Java_alvinJNI_HelloWorld_printText;
end.
//--------------------------------------------------------------------------------

再看看效果吧,是不是成功了?

q里如果q回值的cd是其它的其本cd,比如 JLong,JInt,JFloat,JDouble,JBoolean,JShort,JByte
q些cd的数据可以直接与 Delphi 中的数据q算,对应 Int64,Integer,Single,Double,Boolean,SmallInt,ShortInt
q回时可以直接给 Result ?Delphi 中的数? ?
function Java_alvinJNI_HelloWorld_getInt(PEnv: PJNIEnv; Obj: JObject): JInt; stdcall;
var
  tmp: Integer;
begin
  tmp := 10;
  Result := tmp;
end;

如果q回值的cd?Object ?Java 对象,q回 JObject cd,它的用法我们在以后再来学?
如果q回值的cd?Type[] 数组,接收参数时要设ؓ(f) JObject cd,怎样创徏q样的数l对?我自׃q不知道,以后知道了我再来贴上
因ؓ(f) Java 是把数组作ؓ(f)对象看待?它要以以下的方式来?

例如: 我们要给 Delphi 的方法传入一?byte[] 型数l?在定?Delphi Ҏ(gu)时参数声明ؓ(f) bytearray: JObject

在方法中:
var
 PByteArr: PJByte   //PJByte ?JNI.pas 定义? 里面q有 PJBoolean, PJObject, PJInt {?.
 JVM: TJNIEnv;
 isCopy: Boolean;
begin
 JVM:= TJNIEnv.Create(PEnv);
 isCopy := false;
 PByteArr := JVM.GetByteArrayElements(bytearray, isCopy);  //调用q个Ҏ(gu),可以取得参?bytearray 的地址, isCopy 军_是否复制数组
 //之后,我们可以通过 PByteArr l合 inc(PByteArr) q个指针来操作传q来的数l?
end;


好了,先说到q里,今天,你是不是又学C什?



]]>
通过 JNI ?JAVA ?Delphi E序交互(?http://www.aygfsteel.com/alvin/archive/2006/12/02/84962.html林志?/dc:creator>林志?/author>Fri, 01 Dec 2006 19:12:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/12/02/84962.htmlhttp://www.aygfsteel.com/alvin/comments/84962.htmlhttp://www.aygfsteel.com/alvin/archive/2006/12/02/84962.html#Feedback3http://www.aygfsteel.com/alvin/comments/commentRss/84962.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/84962.html 

在上一中,我们说了如何?Java 调用 Delphi E序的一个方法ƈ传递给其一个字W串参数,现在我们再来看一下如果传递的参数是其它基本类?又要怎么?


首先,我们先看一下如何传?int 型参?定义如下?Java c?

//----------------------------------------------------------------------------------------------------------
package alvinJNI;

class HelloWorld {
        static {
                System.loadLibrary("DelphiAction");
        }

        public native void printText(int i);

        public static void main(String[] args) {
                HelloWorld hw = new HelloWorld();
                hw.printText(100);
        }

}
//----------------------------------------------------------------------------------------------------------

我们再像上次一样在 Delphi 中徏?DLL 工程,写下面的代码(有注?:

//----------------------------------------------------------------------------------------------------------
library DelphiAction;

uses
  JNI;

//我们l这个方法加的参数是: i: JInt
procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; i: JInt); stdcall;
var
  tmpInt: Integer;

begin
  //参数提交q来?int 型数?在这里是一?JInt 数据,它其实就是一?Integer 数据,它的使用更加方便
  //它可以直接地参与 Interger cd数据的运?是不是很Ҏ(gu).
  tmpInt := i + 100;
  tmpInt := tmpInt - 100;
  Writeln(tmpInt);
end;

exports
        Java_alvinJNI_HelloWorld_printText;
end.
//----------------------------------------------------------------------------------------------------------

再看看效果吧,是不是成功了?

q里如果?long 型参?接收时要设ؓ(f) JLong cd,它也可以跟对应的整型数运?我们常用它跟 Int64 一赯?br />如果参数cd?float ,接收参数时要设ؓ(f) JFloat cd,它也可以跟跟 Single 一赯?br />如果参数cd?double ,接收参数时要设ؓ(f) JDouble cd,它也可以跟跟 Delphi 中的 Double 型数据一赯?br />如果参数cd?boolean ,接收参数时要设ؓ(f) JBoolean cd,它也可以跟跟 Delphi 中的布尔型数据一赯?br />如果参数cd?short ,接收参数时要设ؓ(f) JShort cd,它也可以跟跟 SmallInt 型数据一赯?br />如果参数cd?byte ,接收参数时要设ؓ(f) JByte cd,它也可以跟跟 ShortInt 型数据一赯?br />如果参数cd?Object ?Java 对象,接收时要设ؓ(f) JObject cd,它的用法比较复杂(涉及(qing)到对 Java cd对象的操?,我们在以后再来学?
如果参数cd?Type[] 数组,接收参数时要设ؓ(f) JObject cd,因ؓ(f) Java 是把数组作ؓ(f)对象看待?它要以以下的方式来?

例如: 我们要给 Delphi 的方法传入一?byte[] 型数l?在定?Delphi Ҏ(gu)时参数声明ؓ(f) bytearray: JObject

在方法中:
var
 PByteArr: PJByte   //PJByte ?JNI.pas 定义? 里面q有 PJBoolean, PJObject, PJInt {?.
 JVM: TJNIEnv;
 isCopy: Boolean;
begin
 JVM:= TJNIEnv.Create(PEnv);
 isCopy := false;
 PByteArr := JVM.GetByteArrayElements(bytearray, isCopy);  //调用q个Ҏ(gu),可以取得参?bytearray 的地址, isCopy 军_是否复制数组
 //之后,我们可以通过 PByteArr l合 inc(PByteArr) q个指针来操作传q来的数l?
end;


好了,先说到q里,今天,你是不是又学C什?



]]>
通过 JNI ?JAVA ?Delphi E序交互(?http://www.aygfsteel.com/alvin/archive/2006/12/01/84947.html林志?/dc:creator>林志?/author>Fri, 01 Dec 2006 13:30:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/12/01/84947.htmlhttp://www.aygfsteel.com/alvin/comments/84947.htmlhttp://www.aygfsteel.com/alvin/archive/2006/12/01/84947.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/84947.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/84947.html现在隑־来看一下自q博客,今天好不Ҏ(gu)找了个代?Z再l之前的话题,是 JAVA ?Delphi 的交互了.

在上一中,我们说了如何?Java 调用 Delphi E序的一个方?今天我们再深入一?是怎样提交参数?Delphi 的方?以动态的控制 Delphi 的方?
下面,我们切入正题.

首先,我们定义如下?Java c?

//----------------------------------------------------------------------------------------------------------
package alvinJNI;

class HelloWorld {
        static {
                System.loadLibrary("DelphiAction");
        }

        public native void printText(String str);

        public static void main(String[] args) {
                HelloWorld hw = new HelloWorld();
                hw.printText("(zhn)好Q看到效果了吧?);
        }

}
//----------------------------------------------------------------------------------------------------------

我们再像上次一样在 Delphi 中徏?DLL 工程,写下面的代码(有注?:

//----------------------------------------------------------------------------------------------------------
library DelphiAction;

uses
  JNI;

//q一ơ我们要写的q个Ҏ(gu)因ؓ(f)要接收一?Java 传过来的参数,所以我们来说一下这个参数列表的问题
//参数列表中的W一个参?PEnv cd?PJNIEnv, 它是 JNI.pas中定义的cd,我们好多工作要通过它来实现,可以把它看成是一个帮你的E序?Java 沟通的桥梁.
//参数列表中的W一个参?obj cd?JObject.前面q两个参数是固定?q第二个参数暂时我们q不?x)用?
//今天,我们q要l这个方法多加一个参?用来接受 Java 传过来的参数. str: JString

procedure Java_alvinJNI_HelloWorld_printText(PEnv: PJNIEnv; Obj: JObject; str: JString); stdcall;
//q回我们需要用C?TJNIEnv 对象,我们来声?br />var
  JVM: TJNIEnv;
  tmpStr: String;

begin
  //实例?JVM, q个对象可以看成?Java 的虚拟机.(自己的理?
  JVM := TJNIEnv.Create(PEnv);

  //参数提交q来的字W串,实际上是一?JString 对象,我们在这里要?JVM 来{化它.
  //我们调用 JVM ?UnicodeJStringToString 函数可以实?JString ?String 的{化了.
  tmpStr := JVM.UnicodeJStringToString(str);

  Writeln(tmpStr);

  //我们使用?JVM ?要将光?
  JVM.Free;
end;

exports
        Java_alvinJNI_HelloWorld_printText; //为函数做引出声明,q样才能真正的被调用?br />end.
//----------------------------------------------------------------------------------------------------------

我们现在可以生?DelphiAction.dll 其攑֜ Java 工程目录? 再执?alvinJNI.HelloWorld 看看效果?

好了,我们今天主要是实现了一?如何?Java 调用 Delphi 的方法时,l其提交一个参?
是不是很?

今天先说到q里.接下?我会(x)快的再贴上一些文?/p>

]]>
通过 JNI ?JAVA ?Delphi E序交互http://www.aygfsteel.com/alvin/archive/2006/11/14/81035.html林志?/dc:creator>林志?/author>Mon, 13 Nov 2006 21:10:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/11/14/81035.htmlhttp://www.aygfsteel.com/alvin/comments/81035.htmlhttp://www.aygfsteel.com/alvin/archive/2006/11/14/81035.html#Feedback0http://www.aygfsteel.com/alvin/comments/commentRss/81035.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/81035.html  阅读全文

]]>
解决 JAVA 写入文本文g时中文ؕ?/title><link>http://www.aygfsteel.com/alvin/archive/2006/11/05/79235.html</link><dc:creator>林志?/dc:creator><author>林志?/author><pubDate>Sun, 05 Nov 2006 10:22:00 GMT</pubDate><guid>http://www.aygfsteel.com/alvin/archive/2006/11/05/79235.html</guid><wfw:comment>http://www.aygfsteel.com/alvin/comments/79235.html</wfw:comment><comments>http://www.aygfsteel.com/alvin/archive/2006/11/05/79235.html#Feedback</comments><slash:comments>5</slash:comments><wfw:commentRss>http://www.aygfsteel.com/alvin/comments/commentRss/79235.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/alvin/services/trackbacks/79235.html</trackback:ping><description><![CDATA[     摘要: 之前写过一个方法可以解决从外部d文本时中文不?x)ؕ码,可是从程序中的字W串要写回文本文件时又出C中文字符qQ原因是JAVA默认使用Unicode~码的字W,而我们用的windowspȝ文本文g使用的是GBK~码Q要解决q个问题Q就得从~码上入手。下面这个方法就可以字W串以GBK~码写入文本文gQ这样就可以解决写入中文字符q的问题了?<br>  <a href='http://www.aygfsteel.com/alvin/archive/2006/11/05/79235.html'>阅读全文</a><img src ="http://www.aygfsteel.com/alvin/aggbug/79235.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/alvin/" target="_blank">林志?/a> 2006-11-05 18:22 <a href="http://www.aygfsteel.com/alvin/archive/2006/11/05/79235.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>解决 JAVA d文本中文qhttp://www.aygfsteel.com/alvin/archive/2006/11/04/79087.html林志?/dc:creator>林志?/author>Sat, 04 Nov 2006 09:24:00 GMThttp://www.aygfsteel.com/alvin/archive/2006/11/04/79087.htmlhttp://www.aygfsteel.com/alvin/comments/79087.htmlhttp://www.aygfsteel.com/alvin/archive/2006/11/04/79087.html#Feedback2http://www.aygfsteel.com/alvin/comments/commentRss/79087.htmlhttp://www.aygfsteel.com/alvin/services/trackbacks/79087.html偶然的一ơ在一本参考书看到 用byte数组存储dl果,再用byte数组构徏字符?可解决ؕ码问?试了一?果然见效?于是写了下面一个简单的c?以备?  阅读全文

]]>
վ֩ģ壺 | | | Դ| ֹ| | | | ɽ| ¤| | ̨| | | | | Ϫ| | | տ| | | Զ| | | ̩| | | ½| | ɽ| | Ǧɽ| ¡| | | | ˳| | | ̨|