CTP Java 版(Swig)

参考文档 感谢这个博主

https://blog.csdn.net/pjjing/article/details/53186394

https://my.oschina.net/qutterrtl/blog/1490097

https://www.cnblogs.com/ppgeneve/p/7118017.html

http://www.zhimengzhe.com/windows/156189.html

下载 api文件

下载 api文档

安装 VS2012

安装Swig软件,

用的Swig是swigwin-2.0.11版本

解压后 配置windows 环境变量

安装JDK,

注意要安装32位版本,将环境变量配置好。是1.8.0_111版本

然后将你安装jdk目录\Java\jdk1.8.0_111\include下的jni.h和win32文件夹下的jni_md.h, jawt_md.h

一共三个文件拷贝到安装vs的include目录底下\Microsoft Visual Studio 12.0\VC\include。

安装libiconv-1.9.2-1(重要 处理中文使用)

C:\Program Files (x86)\GnuWin32\*

将你安装的libiconv目录下文件夹\GnuWin32\include中的iconv.h文件

同样拷贝到刚才的C++ include目录\Microsoft Visual Studio 12.0\VC\include下。

\GnuWin32\bin文件夹下的libiconv2.dll 这个是后面要用到的

安装Eclipse 32版

如果需要我提供可以留言

将api文件解压

拿到 32版的

创建 c:\ctp3文件

api 放入 ctp3文件

创建 srcmd srctr 文件夹

创建 various.i,thosttraderapi.i,thostmduserapi.i三个文件

=================================================================================================

=================================================================================================

various.i:

/* -----------------------------------------------------------------------------
 * See the LICENSE file for information on copyright, usage and redistribution
 * of SWIG, and the README file for authors - http://www.swig.org/release.html.
 *
 * various.i
 *
 * SWIG Typemap library for Java.
 * Various useful typemaps.
 * ----------------------------------------------------------------------------- */
/* 
 * char **STRING_ARRAY typemaps. 
 * These typemaps are for C String arrays which are NULL terminated.
 *   char *values[] = { "one", "two", "three", NULL }; // note NULL
 * char ** is mapped to a Java String[].
 *
 * Example usage wrapping:
 *   %apply char **STRING_ARRAY { char **input };
 *   char ** foo(char **input);
 *  
 * Java usage:
 *   String numbers[] = { "one", "two", "three" };
 *   String[] ret = modulename.foo( numbers };
 */
%typemap(jni) char **STRING_ARRAY "jobjectArray"
%typemap(jtype) char **STRING_ARRAY "String[]"
%typemap(jstype) char **STRING_ARRAY "String[]"
%typemap(in) char **STRING_ARRAY (jint size) {
int i = 0;
size = JCALL1(GetArrayLength, jenv, $input);
#ifdef __cplusplus
$1 = new char*[size+1];
#else
$1 = (char **)calloc(size+1, sizeof(char *));
#endif
for (i = 0; i<size; i++) {
jstring j_string = (jstring)JCALL2(GetObjectArrayElement, jenv, $input, i);
const char *c_string = JCALL2(GetStringUTFChars, jenv, j_string, 0);
#ifdef __cplusplus
$1[i] = new char [strlen(c_string)+1];
#else
$1[i] = (char *)calloc(strlen(c_string)+1, sizeof(const char *));
#endif
strcpy($1[i], c_string);
JCALL2(ReleaseStringUTFChars, jenv, j_string, c_string);
JCALL1(DeleteLocalRef, jenv, j_string);
}
$1[i] = 0;
}
%typemap(freearg) char **STRING_ARRAY {
int i;
for (i=0; i<size$argnum-1; i++)
#ifdef __cplusplus
  delete[] $1[i];
delete[] $1;
#else
  free($1[i]);
free($1);
#endif
}
%typemap(out) char **STRING_ARRAY {
int i;
int len=0;
jstring temp_string;
const jclass clazz = JCALL1(FindClass, jenv, "java/lang/String");
while ($1[len]) len++;    
jresult = JCALL3(NewObjectArray, jenv, len, clazz, NULL);
/* exception checking omitted */
for (i=0; i<len; i++) {
  temp_string = JCALL1(NewStringUTF, jenv, *result++);
  JCALL3(SetObjectArrayElement, jenv, jresult, i, temp_string);
  JCALL1(DeleteLocalRef, jenv, temp_string);
}
}
%typemap(javain) char **STRING_ARRAY "$javainput"
%typemap(javaout) char **STRING_ARRAY  {
return $jnicall;
  }
/* 
 * char **STRING_OUT typemaps. 
 * These are typemaps for returning strings when using a C char ** parameter type.
 * The returned string appears in the 1st element of the passed in Java String array.
 *
 * Example usage wrapping:
 *   void foo(char **string_out);
 *  
 * Java usage:
 *   String stringOutArray[] = { "" };
 *   modulename.foo(stringOutArray);
 *   System.out.println( stringOutArray[0] );
 */
%typemap(jni) char **STRING_OUT "jobjectArray"
%typemap(jtype) char **STRING_OUT "String[]"
%typemap(jstype) char **STRING_OUT "String[]"
%typemap(javain) char **STRING_OUT "$javainput"
%typemap(in) char **STRING_OUT($*1_ltype temp) {
  if (!$input) {
SWIG_JavaThrowException(jenv, SWIG_JavaNullPointerException, "array null");
return $null;
  }
  if (JCALL1(GetArrayLength, jenv, $input) == 0) {
SWIG_JavaThrowException(jenv, SWIG_JavaIndexOutOfBoundsException, "Array must contain at least 1 element");
return $null;
  }
  $1 = &temp; 
}
%typemap(argout) char **STRING_OUT {
  jstring jnewstring = NULL;
  if($1) {
 jnewstring = JCALL1(NewStringUTF, jenv, *$1);
  }
  JCALL3(SetObjectArrayElement, jenv, $input, 0, jnewstring); 
}
/* 
 * char *BYTE typemaps. 
 * These are input typemaps for mapping a Java byte[] array to a C char array.
 * Note that as a Java array is used and thus passeed by reference, the C routine 
 * can return data to Java via the parameter.
 *
 * Example usage wrapping:
 *   void foo(char *array);
 *  
 * Java usage:
 *   byte b[] = new byte[20];
 *   modulename.foo(b);
 */
%typemap(jni) char *BYTE "jbyteArray"
%typemap(jtype) char *BYTE "byte[]"
%typemap(jstype) char *BYTE "byte[]"
%typemap(in) char *BYTE {
$1 = (char *) JCALL2(GetByteArrayElements, jenv, $input, 0); 
}
%typemap(argout) char *BYTE {
JCALL3(ReleaseByteArrayElements, jenv, $input, (jbyte *) $1, 0); 
}
%typemap(javain) char *BYTE "$javainput"
/* Prevent default freearg typemap from being used */
%typemap(freearg) char *BYTE ""

=================================================================================================

thosttraderapi.i:

%module(directors="1") thosttradeapi
%include "various.i"
%apply char **STRING_ARRAY { char *ppInstrumentID[] }
%{
#include "ThostFtdcTraderApi.h"
%}
%feature("director") CThostFtdcTraderSpi;
%include "ThostFtdcUserApiDataType.h"
%include "ThostFtdcUserApiStruct.h"
%include "ThostFtdcTraderApi.h"

=================================================================================================

thostmduserapi.i:

%module(directors="1") thostmduserapi  
%include "various.i"  
%apply char **STRING_ARRAY { char *ppInstrumentID[]};  
%{  
#include "ThostFtdcMdApi.h"  
%}  
%feature("director") CThostFtdcMdSpi;  
%include "ThostFtdcUserApiDataType.h"  
%include "ThostFtdcUserApiStruct.h"  
%include "ThostFtdcMdApi.h"

=================================================================================================

=================================================================================================

完成后 ctp3目录中的文件:

C:\ctp3 的目录

2018/07/17  21:43    <DIR>          .
2018/07/17  21:43    <DIR>          ..
2017/11/23  15:42               184 error.dtd
2017/11/23  15:42            16,121 error.xml
2018/07/17  21:43    <DIR>          srcmd
2018/07/17  21:44    <DIR>          srctr
2017/11/23  15:57             5,560 ThostFtdcMdApi.h
2017/11/23  15:56            34,436 ThostFtdcTraderApi.h
2017/11/23  15:57           248,505 ThostFtdcUserApiDataType.h
2017/11/23  15:57           231,072 ThostFtdcUserApiStruct.h
2017/11/23  15:59           907,264 thostmduserapi.dll
2018/07/16  19:35               297 thostmduserapi.i
2017/11/23  15:59             3,710 thostmduserapi.lib
2017/11/23  15:57         1,982,976 thosttraderapi.dll
2018/07/16  20:56               306 thosttraderapi.i
2017/11/23  15:57             3,846 thosttraderapi.lib
2018/07/16  19:35             4,678 various.i
2018/07/16  20:27                27 version.txt
              16 个文件      9,179,259 字节
               4 个目录 15,771,103,232 可用字节

cmd 进入ctp3

C:\ctp3>swig.exe -c++ -java -package com.stevezong.thosttraderapi -outdir srctr -o thosttraderapi_wrap.cpp thosttraderapi.i
ThostFtdcTraderApi.h(30) : Warning 514: Director base class CThostFtdcTraderSpihas no virtual destructor.

在ctp3中生成下面两个文件:

2018/07/17  21:44         5,722,812 thosttraderapi_wrap.cpp
2018/07/17  21:44            17,465 thosttraderapi_wrap.h

在 ctp3/srctr/*.java 文件 打包这些文件 com.stevezong.thosttraderapi.jar

在vs12 中

文件-》新建-》项目-》模板-》Visual C++ -》Win32-》Win32项目

名称:thosttraderapi_wrap

位置:C:\ctp\tr\

确认创建-》下一步-》DLL(空项目)-》完成

在解决方案资源管理器-》thosttraderapi_wrap-》源文件-》添加-》现有项

libiconv.lib //C:\Program Files (x86)\GnuWin32\lib

ThostFtdcTraderApi.h //C:\ctp3

ThostFtdcUserApiDataType.h //C:\ctp3

ThostFtdcUserApiStruct.h //C:\ctp3

thosttraderapi.lib //C:\ctp3

thosttraderapi_wrap.cpp //C:\ctp3

thosttraderapi_wrap.h //C:\ctp3

将这7个文件添加好

对thosttraderapi_wrap.cpp文件进行一些编辑:

将下面这些注释掉或者删掉

注释快捷键 先选中 CTRL+K 在CTRL+C

=====================================================================================================================================

=====================================================================================================================================

//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1VTC_1BankBankToFuture_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('102001');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1VTC_1BankFutureToBank_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('102002');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1VTC_1FutureBankToFuture_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('202001');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1VTC_1FutureFutureToBank_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('202002');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1FTC_1BankLaunchBankToBroker_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('102001');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1FTC_1BrokerLaunchBankToBroker_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('202001');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1FTC_1BankLaunchBrokerToBank_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('102002');
//  jresult = (jchar)result; 
//  return jresult;
//}
=====================================================================================================================================
//SWIGEXPORT jchar JNICALL Java_com_stevezong_thosttraderapi_thosttradeapiJNI_THOST_1FTDC_1FTC_1BrokerLaunchBrokerToBank_1get(JNIEnv *jenv, jclass jcls) {
//  jchar jresult = 0 ;
//  char result;
//  
//  (void)jenv;
//  (void)jcls;
//  result = (char)('202002');
//  jresult = (jchar)result; 
//  return jresult;
//}

=====================================================================================================================================

=====================================================================================================================================

CTP是GB2312编码,Java输出是UTF-8编码,

所以要进行字节转换。

在thosttraderapi_wrap.cpp文件开头添加如下代码:

=================================================================================================================================

=================================================================================================================================

thosttraderapi_wrap.cpp:

#pragma warning(disable:4996)
#include <iconv.h>
int code_convert(const char *from_charset, const char *to_charset, char *inbuf, size_t inlen, char *outbuf, size_t outlen)
{
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset, from_charset);
int argument = 1;
if (cd == 0) return -1;
if (iconv(cd, (const char **)pin, &inlen, pout, &outlen) == -1)
{
iconv_close(cd);
return -1;
}
iconv_close(cd);
return 0;
}
#define GB2312TOUTF8FORCONTENT                     char result_utf8[1000]={0};                    if(result)                                     {                                              unsigned int inlength=strlen(result);      int rsp=code_convert("gb2312","utf-8",result,inlength,result_utf8,1000);if(rsp!=-1) jresult = jenv->NewStringUTF((const char *)result_utf8);}

=================================================================================================================================

=================================================================================================================================

搜索文件thosttraderapi_wrap.cpp将

=====================================================================

if (result) jresult = jenv->NewStringUTF((const char *)result);

替换为下面的

GB2312TOUTF8FORCONTENT

=====================================================================

完成后 F7生成解决方案就会在:

C:\ctp3\tr\thosttraderapi_wrap\Debug\thosttraderapi_wrap.dll

thosttraderapi.dll //C:\ctp3\thosttraderapi.dll

thosttraderapi_wrap.dll //C:\ctp3\tr\thosttraderapi_wrap\Debug\thosttraderapi_wrap.dll

libiconv2.dll //C:\Program Files (x86)\GnuWin32\bin\libiconv2.dll

三个文件拷贝到你电脑环境变量path路径底下,如果自己不清楚

C:\Program Files\Java\jre1.8.0_111\bin

C:\Program Files\Java\jdk1.8.0_111\bin

C:\Program Files\Java\jdk1.8.0_111\jre\bin

都放一下

到这里 基本的处理工作基本完成

可以编写java 代码 要先看cpp文件和api文档我这里就写的一个通过交易api 获取所有的交易所 -》每个交易所的商品-》每个商品的所有合约

这里就先写一个最简单的demo  以后有时间在补上正式代码

有需要也可以留言给我

package com.stevezong.ctp.test;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.stevezong.thosttraderapi.*;
class TraderSpiImpl extends CThostFtdcTraderSpi {
final static String m_BrokerId = "BrokerId";
final static String m_UserId = "用户名";
final static String m_InvestorId = "用户名";
final static String m_AccountId = "用户名";
final static String m_PassWord = "密码";
private List<String> ListExchanges = new ArrayList<String>();
private List<String> ListProducts = new ArrayList<String>();
private List<String> ListInstruments = new ArrayList<String>();
TraderSpiImpl(CThostFtdcTraderApi traderapi) {
m_traderapi = traderapi;
}
@Override
public void OnFrontConnected() {
System.out.println("On Front Connected");
CThostFtdcReqUserLoginField field = new CThostFtdcReqUserLoginField();
field.setBrokerID(m_BrokerId);
field.setUserID(m_UserId);
field.setPassword(m_PassWord);
field.setUserProductInfo("JAVA_API");
int a = m_traderapi.ReqUserLogin(field, 0);
System.out.println("a:" + a);
System.out.println("Send login ok");
}
@Override
public void OnRspUserLogin(CThostFtdcRspUserLoginField pRspUserLogin, CThostFtdcRspInfoField pRspInfo,
int nRequestID, boolean bIsLast) {
if (pRspInfo != null && pRspInfo.getErrorID() != 0) {
System.out.printf("Login ErrorID[%d] ErrMsg[%s]\n", pRspInfo.getErrorID(), pRspInfo.getErrorMsg());
return;
}
System.out.println(pRspUserLogin);
System.out.println("Login success!!!");
CThostFtdcQryExchangeField pQryExchange = new CThostFtdcQryExchangeField();
int b = m_traderapi.ReqQryExchange(pQryExchange, 1);
System.out.println("b:" + b);
}
@Override
public void OnRspQryExchange(CThostFtdcExchangeField pExchange, CThostFtdcRspInfoField pRspInfo, int nRequestID,
boolean bIsLast) {
System.out.println(pExchange.toString());
String str;
try {
str = new String(pExchange.getExchangeName().getBytes("ISO-8859-1"),"GBK");
//System.out.println(str);
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
ListExchanges.add(pExchange.toString());
/*
 * CThostFtdcQryProductField pQryProduct = new CThostFtdcQryProductField();
 * pQryProduct.setExchangeID(pExchange.getExchangeID());
 * pQryProduct.setProductClass(pExchange.getExchangeProperty()); int c =
 * m_traderapi.ReqQryProduct(pQryProduct, 2); System.out.println("c:" + c);
 */
if (bIsLast) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
CThostFtdcQryProductField pQryProduct = new CThostFtdcQryProductField();
int c = m_traderapi.ReqQryProduct(pQryProduct, 2);
//System.out.println("c:" + c);
}
}
@Override
public void OnRspQryProduct(CThostFtdcProductField pProduct, CThostFtdcRspInfoField pRspInfo, int nRequestID,
boolean bIsLast) {
System.out.println(pProduct.toString());
ListProducts.add(pProduct.toString());
if(bIsLast) {
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
CThostFtdcQryInstrumentField pQryInstrument = new CThostFtdcQryInstrumentField();
int d = m_traderapi.ReqQryInstrument(pQryInstrument, nRequestID);
System.out.println("d:"+d);
}
}
@Override
public void OnRspQryInstrument(CThostFtdcInstrumentField pInstrument, CThostFtdcRspInfoField pRspInfo,
int nRequestID, boolean bIsLast) {
//System.out.println(pInstrument.toString());
StringBuffer sb = new StringBuffer();
sb.append("SZ_");
sb.append(pInstrument.getExchangeID());
sb.append("_");
sb.append(pInstrument.getProductID());
sb.append("_");
sb.append(pInstrument.getDeliveryYear());
String DeliveryMonth = String.format("%02d",pInstrument.getDeliveryMonth());
sb.append(DeliveryMonth);
sb.append(":");
sb.append(pInstrument.getInstrumentID());
//System.out.println(sb);
ListInstruments.add(sb.toString());
if(bIsLast) { 
try {
PrintWriter pw = new PrintWriter("C:/123/ctp/CThostFtdcInstrumentField.txt");
Collections.sort(ListInstruments);
for(String sub:ListInstruments) {
//System.out.println(sub);
pw.println(sub);
}
pw.flush();
pw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
private CThostFtdcTraderApi m_traderapi;
}
public class TradeapiDemo {
static {
System.loadLibrary("thosttraderapi");
System.loadLibrary("thosttraderapi_wrap");
}
//用的SIMNOW的
final static String ctp1_TradeAddress = "tcp://180.168.146.187:10030";
public static void main(String[] args) {
CThostFtdcTraderApi traderApi = CThostFtdcTraderApi.CreateFtdcTraderApi();
TraderSpiImpl pTraderSpi = new TraderSpiImpl(traderApi);
traderApi.RegisterSpi(pTraderSpi);
traderApi.RegisterFront(ctp1_TradeAddress);
traderApi.SubscribePublicTopic(THOST_TE_RESUME_TYPE.THOST_TERT_RESTART);
traderApi.SubscribePrivateTopic(THOST_TE_RESUME_TYPE.THOST_TERT_RESTART);
traderApi.Init();
traderApi.Join();
traderApi.Release();
return;
}
}

原文地址:http://blog.51cto.com/lmdtx/2146114

时间: 2024-10-09 13:19:29

CTP Java 版(Swig)的相关文章

CTP API 开发之二 :制作CTP java版 API

目前上期技术CTP系统提供的API版本是C++版本 SWIG是一个能将C/C++接口转换为其他语言的工具,目前可以支持Python,Java,R等语言. 本文主要介绍Windows 32/64位平台下利用Swig工具将CTP C++接口API转换为Java可调用的接口. 1.从CTP官网下载最新API包,包中包含32位和64位.API文件包清单: 2.下载安装Swig软件: 3.在API文件包中创建thostapi.i 和various.i文件,thostapi.i是一个接口文件,用于告诉swi

排序算法Java版,以及各自的复杂度,以及由堆排序产生的top K问题

常用的排序算法包括: 冒泡排序:每次在无序队列里将相邻两个数依次进行比较,将小数调换到前面, 逐次比较,直至将最大的数移到最后.最将剩下的N-1个数继续比较,将次大数移至倒数第二.依此规律,直至比较结束.时间复杂度:O(n^2) 选择排序:每次在无序队列中"选择"出最大值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别).时间复杂度:O(n^2) 直接插入排序:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的 移动数据,空出一个适当的位置,把待插

Java版贪吃蛇(比较完善的版本)

很认真的写的一个java版的贪吃蛇游戏,图形界面,支持菜单操作,键盘监听,可加速,减速,统计得分,设定运动速度,设定游戏背景颜色等!应该没有Bug了,因为全被我修改没了.哈哈. 下面是项目各包及类的层次关系: 游戏的主要运行界面截图如下: 下面是部分代码,详细源码见此链接:http://pan.baidu.com/s/1bnubnzh //Snake类: package com.huowolf.entities; import java.awt.Color; import java.awt.Gr

回溯算法解八皇后问题(java版)

八皇后问题是学习回溯算法时不得不提的一个问题,用回溯算法解决该问题逻辑比较简单. 下面用java版的回溯算法来解决八皇后问题. 八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 思路是按行来规定皇后,第一行放第一个皇后,第二行放第二个,然后通过遍历所有列,来判断下一个皇后能否放在该列.直到所有皇后都放完,或者放哪

pureMVC java版搭建流程

转自:http://blog.csdn.net/sutaizi/article/details/6588004 pureMVC 是一个轻量级的框架 它在 flex中非常流行(和cairngorm差不多火) 目前几乎已经移植到所有平台上. 下面实现java版得pureMVC搭建 先给大家看总体的层次: 众所周知 pureMVC是一个轻量级的MVC框架 分为 Model ,View ,Controller.这三个是pureMVC的核心. 除此之外pureMVC中含有一个单例模式Facade.faca

AKKA文档(java版)

目前我正在翻译AKKA官网文档.翻译:吴京润 译者注:本人正在翻译AKKA官网文档,本篇是文档第一章,欢迎有兴趣的同学加入一起翻译.更多内容请读这里:https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/lists/ded96c34f7ce4a6bb8b5473f596e1008/show/https://tower.im/projects/ac49db18a6a24ae4b340a5fa22d930dc/todos/640e53d

应用程序初次运行数据库配置小程序(Java版)

应用程序初始化数据库配置小程序 之前写过一个Java版的信息管理系统,但部署系统的时候还需要手动的去配置数据库和导入一些初始化的数据才能让系统运行起来,所以我在想是不是可以写一个小程序在系统初次运行的时候自动部署数据库和导入一些初始化数据.然后就有了以下的思路: 在应用程序入口处判断数据库是否已经配置完成,若配置完成则进入正常的登录系统完成正常操作即可,若未配置则进入数据库配置的小程序完成数据库配置然后再进入系统,但如何来判断是否已经配置完成呢,在这里我用的是比较原始的方法,配置数据库的时候系统

微博地址url(id)与mid的相互转换 Java版

原理: 新浪微博的URL都是如:http://weibo.com/2480531040/z8ElgBLeQ这样三部分. 第一部分(绿色部分)为新浪微博的域名,第二部分(红色部分)为博主Uid,第三部分(蓝色)为一串貌似随机的字符串. 如果通过方法能计算出蓝色字串与返回的数组里的对应关系则好解决多了. 首先分组蓝色字串 ,从后往前4个字符一组,得到以下三组字符:z8ElgBLeQ 将它们分别转换成62进制的数值则为 35, 2061702, 8999724  将它们组合起来就是一串 3520617

java版的QQ小程序

转载自:http://blog.csdn.net/lihongxun945/article/details/6114290 这是一个简单的java版的QQ小程序. 包括一个简单的服务器和一个简单的客户端. 运行时,先运行服务器,然后在运行客户端,就可以进行聊天了. 默认的配置是localhost,端口4545,更改ip就可以在两天电脑上进行聊天了. 目前不支持内网和外网之间的访问,也不支持多人聊天. 因为这只是一个简单的例子,感兴趣的同学可以通过改进,实现多人聊天和内外网之间的访问. 效果图: