参考文档 感谢这个博主

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 __cplusplusdelete[] $1[i];
delete[] $1;
#elsefree($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.txt16 个文件      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;
}
}

转载于:https://blog.51cto.com/lmdtx/2146114

CTP Java 版(Swig)相关推荐

  1. ctp java_CTP API 开发之二 :制作CTP java版 API

    目前上期技术CTP系统提供的API版本是C++版本 SWIG是一个能将C/C++接口转换为其他语言的工具,目前可以支持Python,Java,R等语言. 本文主要介绍Windows 32/64位平台下 ...

  2. ctp怎么设置java的编码为GBK_GitHub - yuelong2456/java-ctp: java包装的上期ctp,用swig技术实现。...

    java-ctp java包装的上期ctp,用swig技术实现. 2014-4-7 10:09:11 项目已经搭建好,上传到这里方法还不会.时间比较紧,有空上传上来. 2014-7-31 22:43: ...

  3. Java版人脸检测详解上篇:运行环境的Docker镜像(CentOS+JDK+OpenCV)

    欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码):https://github.com/zq2599/blog_demos 本篇概览 如果您看过<三分钟极速体验:Java版 ...

  4. hmcl离线登陆_最好用的Java版启动器HMCL

    原标题:最好用的Java版启动器HMCL 推荐的启动器是什么了?就是 Hello Minecraft! Launcher 简称HMCL,这款启动器特色很多.一张图片简单说明!!! 支持离线登录代表了什 ...

  5. Twitter的分布式雪花算法 SnowFlake 每秒自增生成26个万个可排序的ID (Java版)

    分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的. 有些时候我们希望能使用一种简单一 ...

  6. 分布式主键解决方案----Twitter 雪花算法的原理(Java 版)

    SnowFlake 雪花算法 对于分布式系统环境,主键ID的设计很关键,什么自增intID那些是绝对不用的,比较早的时候,大部分系统都用UUID/GUID来作为主键,优点是方便又能解决问题,缺点是插入 ...

  7. 我的世界java下载1.13_Minecraft Java版 1.13.1-pre2 发布

    Minecraft Java 版 1.13.1-pre2 发布 Back from vacation, we're now trying to finalize 1.13.1 and get it t ...

  8. 我的世界java版不会玩_我的世界:五张MC趣图,Java版玩家永远不懂基岩版玩家的痛...

    <我的世界>1.17版本目前已经更新了8个快照版本,在玩家的期望中,Mojang总算是加入了新的洞穴--噪声洞穴(Noise Caves).虽然这属于洞穴与山崖更新的一大步,Java版玩家 ...

  9. 我的世界1.7.2 java_我的世界Java版1.7版本种子分享

    我的世界Java版的1.7版本中有哪些好的种子呢?下面就给大家带来我的世界Java版1.7版本种子分享,以供玩家参考. 1.seed:-6281771182477298288 x:74 y:68 z: ...

  10. 我的世界 java开发者_我的世界Java版开发者们畅聊水域更新

    ▍水域更新展望 Minecraft Java版的玩家们!你知不知道,现在就有一份快照供你试玩,在里面满是即将到来的水域更新特性?是真的!记住,你在快照里发现的所有东西都不是最终版本--你们的反馈永远是 ...

最新文章

  1. error:“ACCESS_MASK”: 不明确的符号
  2. 1031 Hello World for U (20 分)【难度: 一般 / 知识点: 找规律】
  3. git-svn 在ubuntu deepin(Linux debian系)下的安装与应用
  4. SQL server判断字符串是否包含某个字符串
  5. Hive-分区分桶概述
  6. linux大内存拷贝优化,Linux 下基础设施及系统网络优化
  7. androidstudio在mainactivity实现监听器借口无法抽象_趣操作,Tomcat如何实现一键式启停?
  8. 6-3cifar10数据集介绍-读取-处理
  9. 浅谈数据库设计二三事
  10. python 反爬策略_如何应对网站反爬虫策略?如何高效地爬大量数据?
  11. $(window).load(function(){})跟$(document).ready(function(){})跟$(function(){})区别
  12. python预定义_[Python] Pycharm 预定义 coding 模板
  13. android自定义rx库,Android下载库(OkHttp3+Retrofit2+RxJava2)
  14. 看李佩甫的长篇小说《生命册》的感悟
  15. 【敬伟ps教程】PS基础知识了解
  16. Pro/E产品设计之绘制齿轮的步骤
  17. 立竿见影的思维利器——“黄金思维圈”
  18. Android开发12年高级工程师:作为 IT 行业的过来人,我想对你们说~(职场必看!!!)
  19. PTA基础题考点汇总
  20. 对126邮箱进行自动化测试

热门文章

  1. Lpl and Energy-saving Lamps
  2. miniMobile(手机)
  3. 优化程序性能(CSAPP)
  4. c++中vector的学习
  5. 转: 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?
  6. 代码实现Autolayout
  7. Windows 不能在 本地计算机 启动 SQL Server(MSSQLSERVER) 10048
  8. 30个最常用css选择器解析(经典)
  9. [转]让内网MOSS门户也用域名访问
  10. php设计模式 -- 迭代器模式