posts - 41,  comments - 40,  trackbacks - 0

最新评论

re: 〔Java〕〔Swing〕关闭前提醒 jsjmz 2008-11-30 13:35  
好,学习
黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚 734
黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚黑客帝国忍者神龟变形金刚 94
上面查询的只是字符型的,如果要查询uniqueidentifier类型的,怎么办呢
re: 〔Java〕中文变量[未登录] needjava 2007-09-17 16:33  
@efdev
呵呵,不用说也不行,JVM需要搜索main这个入口函数,规定死了的
re: 〔Java〕中文变量 efdev 2007-09-17 16:22  
关键是这两行能不能用中文:
public static void main( String[] args )
System.out.println
re: 〔Java〕中文变量[未登录] 咖啡 2007-09-17 12:23  
以前写的时候好像有几个特殊的汉字不支持.不过是哪些倒是忘了.

易语言没有见过,但是中文的脚本倒是见过,以前游戏外挂尤其是传奇世界的 传家宝外挂 .
觉得思想还是那么回事,现在新的语言应该是指思想.
从String.java节选的,为了保证缩进,用了全角空格

public static String valueOf( boolean b )
{
 return b ? "true" : "false";
}

public static String valueOf( char c )
{
 char data[]={ c };

 return new String( 0, 1, data );
}

public static String valueOf( int i )
{
 return Integer.toString( i, 10 );
}

public static String valueOf( long l )
{
 return Long.toString( l, 10 );
}

public static String valueOf( float f )
{
 return Float.toString( f );
}

public static String valueOf( double d )
{
 return Double.toString( d );
}
呵呵,试了的确是 + ""慢一倍啊。不过我一直都用String.valueOf
re: 〔Java〕中文变量 wenlin 2007-09-17 11:18  
易语言是大连吴涛易语言公司的。
re: 〔Java〕中文变量 NeedJava 2007-09-17 10:06  
呵呵,-encoding我还很少用啊,又注意到一点了,谢谢!

re: 〔Java〕中文变量[未登录] unmi 2007-09-17 09:49  
java几乎从一开始就支持中文变量命名,javac -encoding,加上了-encoding编译参数就行了

如果在C/C++中把if,while等关键用宏定义成“如果,当”等,那就成了易语言,再怎么中文化,反编译出的汇编代码表示都一样的
re: 〔Java〕乘除法和等效的位运算 NeedJava 2007-09-17 09:45  
另外,Java在编译java文件时,会对其中的部分运算进行优化,所以,上面的测试是不准确的,嘿嘿,忘了说了
以前一直没注意,以后要改过来。谢谢!
re: 〔Java〕乘除法和等效的位运算 NeedJava 2007-09-17 09:33  
呵呵,没错啊,有局限性,所以我的数组长度经常是2的倍数
不错,这果然是一个好习惯
re: 〔Java〕乘除法和等效的位运算 千里冰封 2007-09-17 09:26  
位运算当然快了,不过,只有2的次方可以用 这种方法来做.别的就不行了
@刘远志
并非等价,请改变第一个/*/为//*/进行测试

@wangsoft
没错,链接操作需要重新new一个字符串数组,所以会有开销,我说的意思是我以后就不用简单的链接来转换数字了

@ruislan
String.valueOf()调用的就是Long.toString( long, 10 ),你可以看看源码
我一般都这样用,String.valueOf()
这个不需要比较也可以知道,因为一个是静态方法的实现,不需要建立新的实例,一个是做两个字符串对象链接操作,效果当然可想而知。
两者应该是等价的吧。我没测试过,不过你试试把前后两段代码交换一下位置,估计结果就不一样了
re: 〔Java〕看看谁读的快 NeedJava 2007-09-17 01:07  
麻烦的是数组越大,初始化的时间越大,其实是找平衡点的那个数字
re: 〔Java〕中文变量 NeedJava 2007-09-17 00:44  
@黑蝙蝠

不好意思,易语言我只是以前试用了几次,毕竟是牛人写的,精神可嘉,以后就没有使用了

至于为什么收费,应该还是市场机制?

哪家公司那我就更不知道了



我也是第一次看到system.arraycopy,试了下,数组越长,优势越明显
赞楼主
re: 〔Java〕中文变量 黑蝙蝠 2007-09-17 00:13  
是啊 虽然Java是用的Unicode
顺便问一下 易语言为何要收费?
哪家公司在用?
@千里冰封
谢谢!
re: 〔Java〕比较赋值与System.arraycopy谁快 千里冰封 2007-09-16 23:55  
不错,这种研究性很值得学习
re: 〔Java〕中文变量 千里冰封 2007-09-16 23:53  
呵呵,当然,最好还是不要用中文来做变量名
没错!

在第一种情况,循环千万,一个900,一个1000,两者相差100毫秒

第二种情况就拉大了,循环千万,一个6700,一个2200,相差4500毫秒

为防止JVM将字符数组作为常量保存在内存中,我分别屏蔽运行,效果一样。

也就是说,对于很短的字符串复制,单纯赋值略快,可以忽略

对于很长的字符串复制,用单纯赋值就是脏代码。
re: 〔Java〕比较赋值与System.arraycopy谁快 Matthew Chen 2007-09-16 23:28  
能不能把结果贴出来,我估摸着System.arraycopy要快一点,毕竟是jni
re: 〔Java〕比较赋值与System.arraycopy谁快 king of coder 2007-09-16 20:39  
www.kingofcoder.com
編程王
好,实验说明问题.
还可以用这种办法做单一实例的文件双击打开. 发一个命令 Open args[0] 到 Socket, 然后执行打开. 不过事先需要做安装程序生成文件关联.
@Pande

谢谢帮助,我已经找到源码分析了一下,原理如下:

在本地8794端口建立服务监听,并且一直监听此端口,试图接受此端口其它实例(其它程序?)发送的输入

如果读到数据(好像没有判断数据的合法性,仅仅判断数据不为空),并且自己不是“激活”状态,就“激活”自己;

如果建立服务监听不成功,说明已经有实例(其它程序?)占用此端口了,向此端口发送数据唤醒前一个实例,停几秒以便前一个实例接受,然后退出。

以上分析如有不对,恳请斧正。

程序用的是SWT,激活方法用的是shell.forceActive(),but it's not good for core java. 详细的分析看我的下一篇Blog.

http://www.blogjava.net/needjava/archive/2007/09/01/141959.html

不过,如果仔细分析,可以发现一些问题的。:)

RSSOwl的其他代码我仍在看,很有借鉴价值,再次感谢你!



@NeedJava

不是的。实现要复杂一些。

RSSowl的源码可以从它的CVS Server上拿出来,地址是
http://sourceforge.net/cvs/?group_id=86683
@Pande
你说的是不是类似以下的?

import java.net.Socket;
import java.net.ServerSocket;

import javax.swing.JFrame;

/*******************************************************************************
*
* 用来监测端口,只建立一个实例
*
* 如果系统中已经存在运行实例的话,那么结束原有的运行实例,让新实例运行
*
* Author: 梁邦勇 呵呵,和我同姓
*
******************************************************************************/
class InstanceControl extends Thread
{
public void run()
{
try{ Socket sock=new Socket( "127.0.0.1", 22222 ); //创建socket,连接22222端口
}
catch( Exception e ){} //肯定要报错的,不写e.printStackTrace()

try{ ServerSocket server=new ServerSocket( 22222 ); //创建socket,在22222端口监听

server.accept(); //等待连接

server.close(); //有连接到来,也就是说有新的实例

System.exit( 0 ); //这个实例退出
}
catch( Exception e )
{
e.printStackTrace();
}
}
}

public class ProgramMain
{
public static void main( String[] argv )
{
InstanceControl ic=new InstanceControl();
ic.start();

JFrame frame=new JFrame( "只建立一个实例" );
frame.setBounds( 200, 200, 400, 400 );
frame.setVisible( true );
}
}

我以前用的是它,然后又用文件锁(但是缺点很明显,一个占用端口不做事,一个占用文件不做事)

但是你说激活我不敢苟同,新开的JVM能操作原来打开的JVM?用JNI?

这个只是将原来的实例关闭,打开一个新的实例而已

另外,开源的RSSowl源码我没有,你能寄我一份吗?谢谢!很高兴你的回复!
用Java使用这个功能最好的方法是用ServerSocket,启动是发送Request,如果返回正确的值,表示已经启动。这种方法的另一个好处是,如果程序不是active,可以激活它。

具体的实现你可以看Rssowl的源代码
或使用如下的批处理:

@ECHO OFF

:: 这个成功,但是别关闭
"F:\J2SDK1.4.2\jre\bin\JAVA.EXE" -classpath . SingleInstance

:: 这个失败,可以看到返回的错误码
"F:\J2SDK1.4.2\jre\bin\JAVA.EXE" -classpath . SingleInstance

ECHO Exit code is %ERRORLEVEL%

PAUSE>NUL

@ECHO ON
楼上的误会了,我为了显示JFrame标题,弄了个JFrame,但是没有添加关闭的代码,看样子我得添加了?:)
程序 运行期间 关掉 界面,一直被挂起,你说的就是这个效果喽!!?
楼主厉害