起名Sencha, the nightmare!

java中native的用法

public static native void  java.lang.System.arraycopy(Object, int,
Object, int, int)方法还是native的,

询问了一下java中native的用法,找到如下文章,

学习了:https://www.cnblogs.com/b3051/p/7484501.html 

而是,自己手痒,写了转,结果,填了几乎单坑;

1,javah 之前从没利用过,用起来还算是好,中规中矩;

2,编写C文件也尚好;随便写,结果就开了一个坑;

3,使用cl编译有些题目,有些文章说若设置Visio Studio 20XX,

学习了:http://blog.163.com/yuyang\_tech/blog/static/2160500832013118112049372/

控制下vc6.0来做,

下载地址:http://www.pc6.com/softview/SoftView\_51072.html

解压至D:\pvc6\VC98\BIN,在抬高到系统path中;

新生发现我管D:\pvc6\COMMON\MSDEV98\BIN;D:\pvc6\VC98\INCLUDE也加至路里面了;忘记为甚了;

出错1:

D:\Java\gitworkspace\Coding\bin>CL.EXE -I%java_home%\include -I%java_home%\inclu
de\win32 -LD JavaNativeImp.c -Fehello.dll
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

JavaNativeImp.c
D:\Java\jdk1.8.0_05\include\jni.h(39) : fatal error C1083: Cannot open include f
ile: 'stdio.h': No such file or directory

起模拟 -I参数,

CL.EXE -I%java_home%\include -I%java_home%\include\win32
-ID:\pvc6\VC98\INCLUDE -LD JavaNativeImp.c -Fehello.dll

出错2:

D:\Java\gitworkspace\Coding\bin>CL.EXE -I%java_home%\include -I%java_home%\inclu
de\win32 -ID:\pvc6\VC98\INCLUDE -LD JavaNativeImp.c -Fehello.dll
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

JavaNativeImp.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/dll
/implib:hello.lib
/out:hello.dll
JavaNativeImp.obj
LINK : fatal error LNK1104: cannot open file "LIBCMT.lib"

摸索不交参数可以加lib了,

学习了:http://blog.csdn.net/cruise\_h/article/details/29218407

每当自己的计算机->属性->高级系统安装->环境变量->系统变量中新建系统变量LIB、INCLUDE并安装它们的值也:

LIB:D:\pvc6\VC98\LIB

INCLUDE:%java_home%\include;%java_home%\include\win32;D:\pvc6\VC98\INCLUDE

这般一直输入:cl -LD JavaNativeImp.c -Fehello.dll就足以编译了;

输出:

D:\Java\gitworkspace\Coding\bin>cl -LD JavaNativeImp.c -Fehello.dll
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8168 for 80x86
Copyright (C) Microsoft Corp 1984-1998. All rights reserved.

JavaNativeImp.c
Microsoft (R) Incremental Linker Version 6.00.8168
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

/dll
/implib:hello.lib
/out:hello.dll
JavaNativeImp.obj
   Creating library hello.lib and object hello.exp

结果运行的上报错;

出错3:

D:\Java\gitworkspace\Coding\bin>java com.stono.jvm.JavaNative
Exception in thread "main" java.lang.UnsatisfiedLinkError: D:\Java\gitworkspace\
Coding\bin\hello.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
        at java.lang.ClassLoader$NativeLibrary.load(Native Method)
        at java.lang.ClassLoader.loadLibrary0(Unknown Source)
        at java.lang.ClassLoader.loadLibrary(Unknown Source)
        at java.lang.Runtime.loadLibrary0(Unknown Source)
        at java.lang.System.loadLibrary(Unknown Source)
        at com.stono.jvm.JavaNative.<clinit>(JavaNative.java:6)

坐当Eclipse中采取了64位之java,dll使用的凡32号之;

学习了:https://stackoverflow.com/questions/8113080/cant-load-ia-32-bit-dll-on-a-amd-64-bit-platform
只能把Java改成32位了;因为C语言64不熟悉;

重新用EditPlus写了Java文件,用32位jdk编译;

运行的时节报错,

出错4:

D:\>d:\java\jdk1.6.0_12\bin\java.exe JavaNative
Exception in thread "main" java.lang.UnsatisfiedLinkError: JavaNative.hello(Ljav
a/lang/String;)V
        at JavaNative.hello(Native Method)
        at JavaNative.main(JavaNative.java:7)

尽开始当是dll文件是原的java程序生成的,就以重头跑了同等全;就是先javah
-jni xxx,然后形容c文件,然后cl编译;

结果或者出错4;

学习了:https://www.cnblogs.com/cuglkb/p/5665882.html 这个艺术没有测试;

http://blog.csdn.net/missingu1314/article/details/12650725
用的凡此方法;

重中之重是因以dll中,可能xxx.h头文件中之接口名和xxx.cpp源文件被的贯彻函数名非一致导致的。

源码:

 

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class JavaNative */

#ifndef _Included_JavaNative
#define _Included_JavaNative
#ifdef __cplusplus
extern "C" {
#endif
/*
 * Class:     JavaNative
 * Method:    hello
 * Signature: (Ljava/lang/String;)V
 */
JNIEXPORT void JNICALL Java_JavaNative_hello
  (JNIEnv *, jobject, jstring);

#ifdef __cplusplus
}
#endif
#endif

#include <jni.h>
#include "JavaNative.h"
#include <stdio.h>
JNIEXPORT void JNICALL Java_JavaNative_hello(JNIEnv *env,jobject obj, jstring name){

    const char *str; 
    str = (*env)->GetStringUTFChars(env, name, NULL); 
    if (str == NULL) { 
        return; 
    } 

    printf("Hello World! %s \n", str );
    return;
}

C文件可以管起名,但是方法要跟接口中的名字同样;

接下来就以是cl编译,然后java JavaNative就得了;

Java源码:

public class JavaNative {
    public native void hello(String name);
    static{
        System.loadLibrary("hello");
    }
    public static void main(String[] args) {
        new JavaNative().hello("jni");
    }
}

 

classic

经典 :) 听上去像极了 IIS
Classic。就是人情的网页应用程序。写页面视图就以此地,也是默认的实现。

Store

存储。其实是储存代理的概念,即,从何方读取数据,又以数据形容回哪儿。

其 load
函数在数码读取完成后回调,可以针对回到的数据做更加处理,比较好。需要绑定数据模型使用。

proxy 属性指明了实在展开数据库(存取)操作的劳动地方,这里吧就算发了
Sencha 的圈儿了,Spring 也堪、ASP.NET 也可,随意。

Ext.create(‘Ext.data.Store’,{
    model:’Inventory.model.Band’,
    id:’remotestore’,
    proxy:{
        type : ‘rest’,
        url:’http://localhost:40544/Band.svc/GetBands’,
        reader : {
            type : ‘json’,
            rootProperty : ‘d’
        }
    },
    listeners:{
        load:function ( pageStore, records, successful , pageOperation ,
eOpts ){
            var bs = {bands:[]};
             for(var i=0;i<records.length;i++){
                 bs.bands.push(records[i].data);
             }
            Ext.getStore(‘bandstore’).setData(bs);
        }
    }
});

目录结构

重要注意下面几乎只文本夹

表单

脚来一个复杂点儿的视图模型绑定,将 band 绑定到一个表单 form 上面:

{
    xtype: ‘form’,
    defaultType: ‘textfield’,
    viewModel: ‘band’, //this viewModel will provide default values.
    margin: ‘5, 0, 20, 0’,
    items:[
        { name: ‘Id’, fieldLabel: ‘Id’, readOnly: true, bind: { value:
‘{Id}’} },
        { name: ‘Wavelength’, fieldLabel: ‘Wavelength’, bind: { value:
‘{Wavelength}’} },
        { name: ‘Start’, fieldLabel: ‘Start’, bind: { value: ‘{Start}’}
},
        { name: ‘End’, fieldLabel: ‘End’, bind: { value: ‘{End}’} },
        { name: ‘Reset’, text: ‘Reset’, xtype: ‘button’, handler:
function() { var form = this.up(‘form’).getForm(); form.reset(); } }
    ]
}

数据

modern

当代,与经对应。平板和触碰设备用。

列表

列表可以就此 store 绑定,哪怕这个 store 是起内存里面读取的预定义的数。

Sencha
的文档中对这种绑定描述良少,值得批评。下面的例子,当选择同一条记下的时刻,自动将入选的值填充到前面的
form 里面。

//a grid, using store to retreive data
{
    xtype: ‘grid’,
    border: true,
    width: 600,
    store: {type: ‘bandstore’ },
    columns: [
        { text: ‘Id’,  dataIndex: ‘Id’, width:100 },
        { text: ‘Wavelength’,  dataIndex: ‘Wavelength’, width:200 },
        { text: ‘Start’, dataIndex: ‘Start’, flex: 1, width:100 },
        { text: ‘End’, dataIndex: ‘End’, flex: 1, width:100 }
    ],
    listeners: {
        selectionchange: function(sm, selections){
            if(selections.length==0)return;
            var form = this.up(‘panel’).down(‘form’).getForm();
            form.setValues(selections[0].data);
        }
    }
}

理所当然,这不是列表和表单的常用方法,只是基础。后面 Jony
会提供更扑朔迷离的玩儿法。

基础

跑起来

cd /path/to/app

sencha app watch

放心,出错了会生出红字,自己退回命令行。

始发浏览器,默认地址是 http://localhost:1841

以 watch
模式下,任何对源程序的修改都见面自动更新,方便就见到成效。看起还格外方便,但是坐过分的
js 对象化包装,使得 Sencha
的采取调试起来最艰难。生产化打包编译以后,更是只生一个
app.js,万一出错了的话,你是找不交源头的了。

 

创造一个应用程序

sencha -sdk /path/to/sdk generate app %name% /path/to/app

Model

范,或者给数据模型,可以作为数据库存储的组织映射。

概念一个数据模型,继承自 Ext.data.Model

Ext.define(“Inventory.model.Band”,{
    extend:’Ext.data.Model’,
    fields:[
        {name:’Id’, type:’int’},
        {name:’Start’, type:’float’,allowBlank:false },
        {name:’End’, type:’float’,allowBlank:false},
        {name:’Wavelength’, type:’string’,allowBlank:false }
    ]
});

顺手说一样句,用不同文件夹来存放和一个功能模块各个不同组件的做法很滞后。这仍是为此
IDE
和命名规范好随意解决的题材。而于类名里面添加文件夹的构造,则更进一步多余:多延续或引用、实现抽象类的时段,多单文本夹结构你怎么推广、怎么打名叫?

 

app

同具象平台、设备分辨率无关之东东。比如下面要提到的数据模型、Store。

千方百计充分好,可是亏 IDE 支持的图景下(其自己的开发工具还免支持 6.0.2
版本的 Sencha),在逐一目录里超越反切换是挺麻烦的。即便用了 file
buffer,你为得记住文件 id。

ViewModel

视图模型,即针对页面上所加大字段的照。可以是数据模型的一模一样组成部分,也可以是多单涉及数据模型的组合。但实则
Sencha 这么弄,是管简单问题打复杂了,因为 html
页面本身就是生表单和字段,直接 parse
其键值对即可;而现虽然要再次又定义一所有这些字段,等于同样的概念在 html
表单和模型视图里面分别写了一如既往全副,重复了。

概念一个视图模型

Ext.define(‘Inventory.view.main.MainModel’, {
    extend: ‘Ext.app.ViewModel’,
    alias: ‘viewmodel.main’,
    data: {
        name: ‘Inventory’
    }
});

使的时刻,首先以页面中说明要用到的视图模型是何人,然后对页面及可以
set 的性能绑定视图模型的字段,比如下面是,绑定页面的题:

viewModel: ‘main’,
header: {
    title: {
        bind: {
            text: ‘{name}’
        }
    }
}

 

视图

在页面上的可视区域,用来展示内容、提供相互操作。类似 SharePoint 上面的
WebPart。但是 WebPart
的原意是于用户为可以从定义页面(这个想法呢是怪天真),视图则是深受程序员来自定义页面(这个想法还是天真)。

缔造一个初视图,名字被 band.Band,但是在 main
文件夹里面。这就是是本身面前说的,文件夹归类法不依靠谱的地方。

Ext.define(‘Inventory.view.band.Band’, {
    extend: ‘Ext.panel.Panel’,
    xtype: ‘bandview’,
    items :[
        {html:'<h2>hello!</h2>’}
    ]
});

咱俩也堪就此事先定义之视图模型来动态地显示点儿内容:

Ext.define(‘Inventory.view.band.Band’, {
    extend: ‘Ext.panel.Panel’,
    xtype: ‘bandview’,
    viewModel: ‘main’,
    items :[
        {bind:{html:'<h2>hello,{name}!</h2>’}}
    ]
});

调试

假使不幸地,你的 Sencha 项目给集成进了某个服务器环境(比如
weblogic),那么,单独开一个彼此的同类 Sencha 应用即更换得很实惠了。

packages

从今定义的次第包,比如主题,就厕这里。默认的界面主题如果未可知满足急需,那么即使好从定义主题。虽然从定义是大痛苦之。

resources

图片,通用的公文在此处。

 

尖端绑定

比如,上面的慌 listeners 里面的 selectionchange
方法,其实是可以错过丢的,只要这么描绘:

Ext.define(‘Inventory.view.band.Band’, {
    extend: ‘Ext.panel.Panel’,
    xtype: ‘bandview’,
    viewModel: ‘main’,
    items :[
        //a random message showing viewmodel binding
        { bind: { html: ‘<h2>hello,{name}!</h2>’ } },
        //a form, with viewmodel binding as well
        {
            xtype: ‘form’,
            defaultType: ‘textfield’,
            margin: ‘5, 0, 20, 0’,
            items:[
                { name: ‘Id’, fieldLabel: ‘Id’, readOnly: true , bind: {
value: ‘{bandgrid.selection.Id}’} },
                { name: ‘Wavelength’, fieldLabel: ‘Wavelength’ },//,
bind: { value: ‘{Wavelength}’} },
                { name: ‘Start’, fieldLabel: ‘Start’ },//, bind: {
value: ‘{Start}’} },
                { name: ‘End’, fieldLabel: ‘End’ },//, bind: { value:
‘{End}’} },
                { name: ‘Reset’, text: ‘Reset’, xtype: ‘button’,
handler: function() { var form = this.up(‘form’).getForm();
form.reset(); } }
            ]
        },
        //a grid, using store to retreive data
        {
            xtype: ‘grid’,
            reference: ‘bandgrid’,
            border: true,
            width: 600,
            store: {type: ‘bandstore’ },
            columns: [
                { text: ‘Id’,  dataIndex: ‘Id’, width:100 },
                { text: ‘Wavelength’,  dataIndex: ‘Wavelength’,
width:200 },
                { text: ‘Start’, dataIndex: ‘Start’, flex: 1, width:100
},
                { text: ‘End’, dataIndex: ‘End’, flex: 1, width:100 }
            ]
        }
    ]
});

Sencha 的想想,是用编程的方式来贴 Web
应用程序的零部件,所以安排属性就能够做事是极好的,Sencha
的框架自己懂什么样找到涉嫌数据并联络起来。

哦,想得可怜好的。这么做生一个前提:有完全的规划,且几乎未见面改。

 

滚动条

一对时候表单内容尽多见面胜出窗口范围,此时足就此滚动条属性(又一个复的阐明):

scrollable: true

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图