月度归档:2017年07月

mvn 报错 The parameters ‘mainClass’

[ERROR] Failed to execute goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java (default-cli) on project test_artifact: The parameters ‘mainClass’ for goal org.codehaus.mojo:exec-maven-plugin:1.6.0:java are
missing or invalid -> [Help 1]

因为插件还没配置,注意配置引导路径
解决方法:在pom文件添加如下代码  EchoServer 为包含main的类

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <goals>
                        <goal>java</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <mainClass>EchoServer</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Android onClick 写法

package com.hello;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class AActivity extends Activity {
/** Called when the activity is first created. */

EditText Ev1;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Ev1 = (EditText)findViewById(R.id.editText1);

//第一种方式
Button Btn1 = (Button)findViewById(R.id.button1);//获取按钮资源
Btn1.setOnClickListener(new Button.OnClickListener(){//创建监听
public void onClick(View v) {
String strTmp = “点击Button01″;
Ev1.setText(strTmp);
}

});

//第二种方式
Button Btn2 = (Button) findViewById(R.id.button2);//获取按钮资源
Btn2.setOnClickListener(listener);//设置监听

}

Button.OnClickListener listener = new Button.OnClickListener(){//创建监听对象
public void onClick(View v){
String strTmp=”点击Button02″;
Ev1.setText(strTmp);
}

};
//第三种方式(Android1.6版本及以后的版本中提供了)
public void Btn3OnClick(View view){
String strTmp=”点击Button03”;
Ev1.setText(strTmp);

}
}

android studio 新建项目报错 Failed to resolve: junit:junit:4.12

android studio 新建项目报错如下:

(27,17) Failed to resolve: junit:junit:4.12

Failed to resolve: javax.inject:javax.inject:1

Failed to resolve: javax.annotation:javax.annotation-api:1.2

Failed to resolve: com.google.code.findbugs:jsr305:2.0.1

Failed to resolve: org.hamcrest:hamcrest-library:1.3

Failed to resolve: org.hamcrest:hamcrest-integration:1.3

Failed to resolve: com.squareup:javawriter:2.1.1

解决办法:

注释gradle文件中的

compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
testCompile 'junit:junit:4.12'
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" (可删可不删的)

Jfinal 里直接用dao或Db

Jfinal 里直接用dao或Db

需要启动DruidPlugin和ActiveRecordPlugin插件

然后start();

代码如下:

public static void startPlugin() {
PropKit.use(“config_jdbc.txt”);
DruidPlugin druidPlugin = new DruidPlugin(PropKit.get(“jdbcUrl”), PropKit.get(“user”), PropKit.get(“password”).trim());
ActiveRecordPlugin arp = new ActiveRecordPlugin(“mysql”,druidPlugin);
_MappingKit.mapping(arp);

druidPlugin.start();
arp.start();
}
然后再main方法里:

public static void main( String[] args ) {
startPlugin();
System.out.println(Db.queryStr(“select ‘hello’ from dual”));
}

Tomcat 内存配置

设置Tomcat启动的初始内存其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。

可以利用JVM提供的-Xmn -Xms -Xmx等选项可进行设置

三、实例,以下给出1G内存环境下Java jvm 的参数设置参考:

JAVA_OPTS=”-server -Xms800m -Xmx800m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m -Djava.awt.headless=true ”

JAVA_OPTS=”-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX: NewSize=192m -XX:MaxNewSize=384m”

CATALINA_OPTS=”-server -Xms768m -Xmx768m -XX:PermSize=128m -XX:MaxPermSize=256m -XX:NewSize=192m -XX:MaxNewSize=384m”

Linux

在/usr/local/apache-tomcat-5.5.23/bin 目录下的catalina.sh添加:

JAVA_OPTS=’-Xms512m -Xmx1024m’要加“m”说明是MB,否则就是KB了,在启动tomcat时会 报内存不足。

-Xms:初始值-Xmx:最大值-Xmn:最小值

Windows

在catalina.bat最前面加入set JAVA_OPTS=-Xms128m -Xmx350m

如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.

但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.

JFinal 部署在tomcat下

环境配置就不说了,JFinal项目和java web项目本质上是一样的,所以部署方式也是相同的

1 进入/var/www目录,解WAR包,目录下会有WEB-INF,META-INF 等文件夹

2 修改  TOMCAT_HOME/conf/ server.xml 文件找到 Host 标记,在其中添加如下子标记:

<Context path=”” docBase=”/var/www” reloadable=”false” />

3 注意 Host 标记中的 appBase 属性不要去修改,让其为默认值 “webapps”

4 启动 tomcat

注意点:

1 不要把项目部署在TOMCAT_HOME/webapps 目录下,避免 tomcat 加载项目两次的坑,这个坑会引发一些莫名奇妙的问题,例如:老版本的tomcat中,多人同时登录后session产生混乱

2 以上配置中的 Context 标记的 path 属性一定要设置为 “” 而不是 “/”,否则也会跳入一个坑。 docBase 属性后面放项目名称的绝对地址

mysql与JFinal的数据关系

MySQL与jfinal在使用过程中,一定要弄清楚数据关系,否则容易发生类型不匹配的错误。

一、关系整理

为此,我根据jfinal的源码和mysql的数据字段类型,整理列表如下:

mysql                                                                                                jfinal                  例子                      编号
varchar, char, enum, set, text, tinytext, mediumtext, longtext                          String          getStr(“xxx”)          0001
int, integer, tinyint(n) n > 1, smallint, mediumint                                                     int             getInt(“xxx”)    0002
bigint, unsign int                                                                                                             long getLong(“xxx”) 0003
unsigned bigint                                                                                                            BigInteger getBigInteger(“xxx”) 0004
date, year                                                                                                                       Date getDate(“xxx”) 0005
time                                                                                                                                 Time getTime(“xxx”) 0006
timestamp, datetime                                                                                                   Timestamp getTimestamp(“xxx”) 0006
real, double                                                                                                                   Double getDouble(“xxx”) 0007
float                                                                                                                                 Float getFloat(“xxx”) 0008
bit, tinyint(1)                                                                                                                 Boolean getBoolean(“xxx”) 0009
decimal, numeric                                                                                                         BigDecimal getBigDecimal(“xxx”) 0010
binary, varbinary, tinyblob, blob, mediumblob, longblob                                   byte[] getBytes(“xxx”) 0011
extends from Number                                                                                                 Number getNumber(“xxx”) 0012
二、tinyint

在mysql中,tinyint(n)中的n对jfinal的数据转换有影响:

n>1时,jfinal要使用getInt。
n=1时,jfinal要使用getBoolean。
三、unsigned

在mysql中unsigned表示有无符号,举例来说:

unsigned int,表示数据>0,不包含负数,那么jfinal就要使用getLong。
unsigned bigint,表示数据>0,不包含负数,那么jfinal就要使用getBigInteger。
四、int(m)

关于mysql中int(m)中的m,这当然包含bigint(m)的m。

int[(m)]
有符号值:-2147683648 到2147683647(- 231 到231- 1)
无符号值:0到4294967295(0 到232 – 1) 4个字节
这意味着,如果你的数据字段是这样子的话

`uid` int(11) NOT NULL DEFAULT ‘0’ COMMENT ‘用户id’
1
1
那么m=11是正确的,因为考虑到“-”(负数),长度最大为11位。

而如果你的数据字段是这样子的话

`uid` int(11) unsigned NOT NULL COMMENT ‘用户id’
1
1
那么m=11是没有意义的,因为最大长度为10位,如果你比较专业的话,此时,你的数据字段就应该是这样子的

`uid` int(10) unsigned NOT NULL COMMENT ‘用户id’
1
1
五、jfinal的api

只看如下代码:

/**
* Get attribute of mysql type: int, integer, tinyint(n) n > 1, smallint, mediumint
*/
public Integer getInt(String attr) {
return (Integer)attrs.get(attr);
}

/**
* Get attribute of mysql type: bigint, unsign int
*/
public Long getLong(String attr) {
return (Long)attrs.get(attr);
}
1
2
3
4
5
6
7
8
9
10
11
12
13

1
2
3
4
5
6
7
8
9
10
11
12
13
方法很详细的介绍了应该匹配哪一种mysql数据类型。

编译ESP8266固件

一、编译环境配置

我们先安装编译需要的软件包
sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-amd64 python-serial libexpat-dev

export PATH=”/opt/xtensa-lx106-elf/bin/:$PATH”

报错:

/opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.2/include/sys/fcntl.h:31:34: fatal error: xtensa/simcall-fcntl.h: No such file or directory
#include <xtensa/simcall-fcntl.h>

cp -Rp ~/Share/ESP8266_RTOS_SDK/extra_include/xtensa ./