程序分按键执行没问题,但放到循环就出错,请帮分析下原因

hongss 2013-02-21 11:04:07
通用过程
procedure TFormMain.OpenOneDev(iDevId: Integer);
var
Hr: Integer;
begin
if m_DoFlag[iDevId] then
begin
MessageBox(0, PChar('相机 '+IntToStr(iDevId)+' 已经打开!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//打开设备
Hr:= HV_OpenDevice(iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_OpenDevice 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//初始化设备
Hr:= HV_DevCapInit(iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_DevCapInit 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
Hr:= HV_SetExposureValue(3000,iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_SetExposureValue 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//设置去抖动的时间,该时间越短,触发采集输出就越快
Hr:= HV_SetSnapDebounceTime(20,iDevId);
if (Hr <> HV_SUCCESS) then
begin
MessageBox(0, PChar('HV_SetSnapDebounceTime 失败!'), PChar('提示'), MB_ICONWARNING or MB_OK);
Exit;
end;
//设置触发模式下的参数,第一个参数为相机输出的帧率,不能高于该相机固有帧率。
//第二个参数为一次触发获取几幅图像,该参数设为0时,则表示以第一个参数为帧率连续触发输出。
//第三个参数表示相机的对应网卡的ID号
HV_SetSnapTrigFreqImgCount(14,1,iDevId);
//设置回调函数
case iDevId of
0:HV_SetCallBack(@MyCallBackProc0,iDevId);
1:HV_SetCallBack(@MyCallBackProc1,iDevId);
2:HV_SetCallBack(@MyCallBackProc2,iDevId);
3:HV_SetCallBack(@MyCallBackProc3,iDevId);
end;
//设置采集模式,第一个参数:1:连续采集模式,0:触发模式
HV_SetPreviewSnapMode(0,1,iDevId);

HV_SetImageMirror(2,iDevId);
//设置SDK进入采集状态
HV_StartCapture(iDevId);

m_DoFlag[iDevId]:= True;
Label2.Caption:= '相机:'+IntToStr(iDevId);
end;


分三个按键执行,一个一个点,可以依次打开三个相机
procedure TFormMain.SpeedButton1Click(Sender: TObject);
begin
OpenOneDev(0);
// SpeedButton2.Click; //直接调用打开设备2的事件,还是会跳出来。。。
end;

procedure TFormMain.SpeedButton2Click(Sender: TObject);
begin
OpenOneDev(1); //单个打开,就可以
end;

procedure TFormMain.SpeedButton3Click(Sender: TObject);
begin
OpenOneDev(2);
end;


放到循环里,程序在执行到i=1的时候就会跳出来
procedure TFormMain.OpenDeviceBtnClick(Sender: TObject);
var
i: Integer;
begin
for i:=0 to 2 do
OpenOneDev(i);
end;


而且有时候还发现,for循环执行完i=0后,第二次进入的i不是1,而是一个很大的数值。

请帮忙分析分析什么原因啊
...全文
495 38 打赏 收藏 转发到动态 举报
写回复
用AI写文章
38 条回复
切换为时间正序
请发表友善的回复…
发表回复
hongss 2013-03-08
  • 打赏
  • 举报
回复
hongss 2013-02-27
  • 打赏
  • 举报
回复
you should never need to turn optimizations off 问题是关掉就可以正常运行,不关就。。。
feiba7288 2013-02-26
  • 打赏
  • 举报
回复
引用 35 楼 hongss 的回复:
引用 31 楼 hongss 的回复:执行了,问题依旧…… 但是我找到解决办法了,就是不知道为什么…… 还是前边说的,把Delphi的环境修改一下 Project->Options->Complier->Optimization的钩,去掉 就好了。 这个不是优化代码选项吗?为什么会在这里出幺蛾子呢? 有没有大牛解释下这个啊
只找到这个,再等高人解释。 Optimization (-$O+)* Controls code optimization. When enabled (equivalent to {$O+}), the compiler performs a number of code optimizations, such as placing variables in CPU registers, eliminating common subexpressions, and generating induction variables. When disabled, (equivalent to {$O-}), all such optimizations are disabled. Other than for certain debugging situations, you should never need to turn optimizations off. All optimizations performed by the Delphi compiler are guaranteed not to alter the meaning of a program. In other words, the compiler performs no "unsafe" optimizations that require special awareness by the programmer. This option can only turn optimization on or off for an entire procedure or function. You can’t turn optimization on or off for a single line or group of lines within a routine. Default = true
hongss 2013-02-25
  • 打赏
  • 举报
回复
引用 31 楼 hongss 的回复:
执行了,问题依旧…… 但是我找到解决办法了,就是不知道为什么…… 还是前边说的,把Delphi的环境修改一下 Project->Options->Complier->Optimization的钩,去掉 就好了。 这个不是优化代码选项吗?为什么会在这里出幺蛾子呢?
有没有大牛解释下这个啊
山东蓝鸟贵薪 2013-02-23
  • 打赏
  • 举报
回复
不知,占地学习中
hongss 2013-02-23
  • 打赏
  • 举报
回复
现在是知其然,不知其所以然啊。。。
feiba7288 2013-02-22
  • 打赏
  • 举报
回复
再检查下其他接口函数的声明。
hongss 2013-02-22
  • 打赏
  • 举报
回复
是啊。。。 灰常郁闷…… 现在的情况下,我用
procedure TFormMain.SpeedButton1Click(Sender: TObject);
begin
  OpenOneDev(0);
  OpenOneDev(1);
  OpenOneDev(2);
end;
执行到OpenOneDev(1);还是不行~~~~ 神啊,救救我吧
feiba7288 2013-02-22
  • 打赏
  • 举报
回复
引用 23 楼 hongss 的回复:
执行到i为1的时候,到HV_DevCapInit(i);就跳出,直接杀掉进程的问题找到了: 他们的DLL开发文档过期了。。。 C/C++ code?123456789101112/******************************************************************************* Function: ……
修改了这个接口后循环i还是在改变啊????
hongss 2013-02-22
  • 打赏
  • 举报
回复
执行到i为1的时候,到HV_DevCapInit(i);就跳出,直接杀掉进程的问题找到了: 他们的DLL开发文档过期了。。。
/******************************************************************************
* Function:	HV_DevCapInit
* Description: 设备捕捉初始化
* Format:
*     HRESULT HV_DevCapInit(int nDevId, LPCSTR lpFileName = NULL) ;
* Params:
*     int nDevId
*	  LPCSTR lpFileName: 配置文件保存路径,当为空时,默认为当前目录;
* Return: 
*     HV_SUCCESS: 成功
******************************************************************************/
HVGIGE_WP_API HRESULT __stdcall HV_DevCapInit(int nDevId, LPCSTR lpFileName = NULL);
后边多了一个参数。 就剩下这个循环i改变很大值的问题了
feiba7288 2013-02-22
  • 打赏
  • 举报
回复
好像以前也有遇到这个选项的问题,忘记了,终于解决了。
hongss 2013-02-22
  • 打赏
  • 举报
回复
执行了,问题依旧…… 但是我找到解决办法了,就是不知道为什么…… 还是前边说的,把Delphi的环境修改一下 Project->Options->Complier->Optimization的钩,去掉 就好了。 这个不是优化代码选项吗?为什么会在这里出幺蛾子呢?
feiba7288 2013-02-22
  • 打赏
  • 举报
回复
引用 29 楼 hongss 的回复:
引用 27 楼 mysterx 的回复:引用 25 楼 hongss 的回复:是啊。。。 灰常郁闷…… 现在的情况下,我用 Delphi/Pascal code?123456procedure TFormMain.SpeedButton1Click(Sender: TObject);begin OpenOneDev(0); OpenOneDev(1); ……
我将你c++的代码翻译过来了,你直接复制过去执行试下有没有问题。

procedure TFormMain.OpenOneDev;
var
  Hr: Integer;
  iDevId: Integer;
begin
  for iDevId := 0 to 2 do
  begin
    if m_DoFlag[iDevId] then
    begin
      MessageBox(0, PChar('Device is already opened!'), PChar('Error'), MB_ICONWARNING or MB_OK);
      Exit;
    end;

    Hr:= HV_OpenDevice(iDevId);
    if (Hr <> HV_SUCCESS) then
    begin
      MessageBox(0, PChar('Open Device fail!'), PChar('Error'), MB_ICONWARNING or MB_OK);
      Exit;
    end;

    Hr:= HV_DevCapInit(iDevId);
    if (Hr <> HV_SUCCESS) then
    begin
      MessageBox(0, PChar('Device initial fail!'), PChar('Error'), MB_ICONWARNING or MB_OK);
      Exit;
    end;

    HV_SetExposureValue(200,iDevId);
    HV_SetSnapDebounceTime(20,iDevId);
    HV_SetSnapTrigFreqImgCount(14,1,iDevId);

    case iDevId of
      0:HV_SetCallBack(@MyCallBackProc0,iDevId);
      1:HV_SetCallBack(@MyCallBackProc1,iDevId);
      2:HV_SetCallBack(@MyCallBackProc2,iDevId);
    end;

    HV_SetPreviewSnapMode(0,0,iDevId);
    //HV_SetImageMirror(2,iDevId);
    HV_StartCapture(iDevId);
    m_DoFlag[iDevId]:= True;
  end;
end;

procedure TFormMain.Button1Click(Sender: TObject);
begin
  OpenOneDev;
end;
hongss 2013-02-22
  • 打赏
  • 举报
回复
引用 27 楼 mysterx 的回复:
引用 25 楼 hongss 的回复:是啊。。。 灰常郁闷…… 现在的情况下,我用 Delphi/Pascal code?123456procedure TFormMain.SpeedButton1Click(Sender: TObject);begin OpenOneDev(0); OpenOneDev(1); OpenOneDev(2);end; ……
我试过,刚才又试了下,1000不行,2000不行,加到3000还是不行…… 我要用8个相机,要延时这么长时间的话……
feiba7288 2013-02-22
  • 打赏
  • 举报
回复
引用 27 楼 mysterx 的回复:
引用 25 楼 hongss 的回复:是啊。。。 灰常郁闷…… 现在的情况下,我用 Delphi/Pascal code?123456procedure TFormMain.SpeedButton1Click(Sender: TObject);begin OpenOneDev(0); OpenOneDev(1); OpenOneDev(2);end; ……
应该不是,他的VC代码没有问题,代码中没有用任何停顿。
  • 打赏
  • 举报
回复
引用 25 楼 hongss 的回复:
是啊。。。 灰常郁闷…… 现在的情况下,我用 Delphi/Pascal code?123456procedure TFormMain.SpeedButton1Click(Sender: TObject);begin OpenOneDev(0); OpenOneDev(1); OpenOneDev(2);end; 执行到OpenOneDev(1);还……
OpenOneDev(0); sleep(1000); OpenOneDev(1); sleep(1000); OpenOneDev(2); 试试能不能通过,理论上能通过。应该是抢占硬件资源导致的。
hongss 2013-02-21
  • 打赏
  • 举报
回复
void CIndCamDemoDlg::OnOpenCam0() 
{
	int i;
	for(i=0;i<3;i++)  
	//这是我们准备用循环的方式把8个相机顺序打开,我们这里用三个相机做实验 	{
	  // TODO: Add your control notification handler code here
	  if (bCamStatus[i])
    {
		MessageBox(_T("Device is already opened!"));
		return ;
	}
	HRESULT hr;
   	hr = HV_OpenDevice(i);	//打开设备
	if(hr!=HV_SUCCESS)
	{
		MessageBox(_T("Open Device fail!"));
		return ;
	}
	// 初始化设备
	hr = HV_DevCapInit(i);	//初始化设备
	if(hr!=HV_SUCCESS)
	{
		MessageBox(_T("Device initial fail!"));
		return ;
	}

	HV_SetExposureValue(200,i);		//设置曝光行数,一行为30微秒左右

	HV_SetSnapDebounceTime(20,i);	//设置去抖动的时间,该时间越短,触发采集输出就越快

	HV_SetSnapTrigFreqImgCount(14,1,i);	//设置触发模式下的参数,第一个参数为相机输出的帧率,不能高于该相机固有帧率。
										//第二个参数为一次触发获取几幅图像,该参数设为0时,则表示以第一个参数为帧率连续触发输出。									
										//第三个参数表示相机的对应网卡的ID号
	//设置回调函数
	if (i==0)
	HV_SetCallBack(CIndCamDemoDlg::MyCallBackProc0,i);
	if (i==1)
	HV_SetCallBack(CIndCamDemoDlg::MyCallBackProc1,i);
	if (i==2)
	HV_SetCallBack(CIndCamDemoDlg::MyCallBackProc2,i);
	
	//设置采集模式,第一个参数:1:连续采集模式,0:触发模式
	HV_SetPreviewSnapMode(0,0,i); 

	//设置SDK进入采集状态
	HV_StartCapture(i);
	
 	bCamStatus[i] = TRUE;
	// 	m_nIndex = -1;
	//MessageBox(_T("打开成功!"));
	//下边的OpenCam1是为了测试两个相机打开的时候会不会跳出来,把相机1打开的消息事件放到这里来执行。  	//OnOpenCam1();
	}
	return ;
}
在VC里边这样就没问题
hongss 2013-02-21
  • 打赏
  • 举报
回复
引用 11 楼 pathletboy 的回复:
连续打开设备之间加延迟试试。
procedure TFormMain.OpenDeviceBtnClick(Sender: TObject);
var
  i: Integer;
begin
  for i:=0 to 2 do
  begin
    if m_DoFlag[i] then
    begin
      MessageBox(0, PChar('相机 '+IntToStr(i)+' 已经打开!'), PChar('提示'), MB_ICONWARNING or MB_OK);
      Exit;
    end;
    HV_OpenDevice(i);
//    HV_DevCapInit(i);
    HV_SetExposureValue(3000,i);
    HV_SetSnapDebounceTime(20,i);
    HV_SetSnapTrigFreqImgCount(14,1,i);
    if (i=0) then
      HV_SetCallBack(@MyCallBackProc0,0);
    if (i=1) then
      HV_SetCallBack(@MyCallBackProc1,1);
    if (i=2) then
      HV_SetCallBack(@MyCallBackProc2,2);
    if (i=3) then
      HV_SetCallBack(@MyCallBackProc3,3);
    HV_SetPreviewSnapMode(0,1,i);
    HV_SetImageMirror(2,i);
    HV_StartCapture(i);
    m_DoFlag[i]:= True;
    label2.Caption:= 'OK';
    Sleep(3000);
  end; 
end;
。。。。。。涛声依旧
pathletboy 2013-02-21
  • 打赏
  • 举报
回复
连续打开设备之间加延迟试试。
hongss 2013-02-21
  • 打赏
  • 举报
回复
对了,他们的DLL看来是VC写的。 上边的Delphi程序,改成VC的,就可以顺利运行(XP+VC2008)
加载更多回复(18)
JAVA试题(100道) —————————————————————————————————————— 题目1: 下面不属于基本类型的是:c (选择1项) A) boolean B) long C) String D) byte 题目2:d 如下程序中: (1)public class CharToInt (2){ (3) public static void main(String[] args) (4) { (5) int a,b=10; (6) char c='语'; (7) a=b+c; (8) System.out.println("结果是:"+a); (9) } (10)} 下面的说法中正确的是:(选择1项) A) 程序运行到第6行会出现编译错误,因为c为char类型,不能把一个汉字赋给一个字符型。 B) 程序运行到第7行会出现编译错误,因为字符型与整型不能进行加法运算。 C) 程序能够正常编译和运行,但是不会输出任何结果。 D) 程序将字符型转换为unicode编码并和b的数值相加的和输出。 题目3: 下面的说法中,错误的是:d(选择1项) A) 在Java中标志符可以是字母、下划线、数字或$符号。 B) 在Java中布尔类型不能和数字之间不能来回转换,即false和true不对应任何零或非零的值。 C) 双精度类型double比单精度类型float具有更高的精度和更大的表示范围,但float类型具有速度快、占用内存小的优点。 D) 在Java中布尔值可以用true或false来表示,但是同时也可以用1或0来表示。 题目5:b 程序如下: class Test { public static void main(String[] args) { int i=1000; for(;;) { if(i>999) { _______________ } } } } 下面对程序的横线处填写不同语句的正确的是:(选择一项) A) 填充 break 使程序能够有退出循环的可能性。 B) 填充 continue 将使程序成为死循环,永远无法退出循环。 C) 填充 continue 使程序能够有退出循环的可能性。 D) 填充 break 将使程序成为死循环,永远无法退出循环。 题目7:b 下面的说法中错误的是:(选择一项) A) 类是描述了同一类对象具有的数据和行为。Java语言中的类将这些数据和行为进行封装,形成了一种复合数据类型 B) 在Java的类中可以有三类内容别是数据的定义、基本输出语句、函数的定义。 C) Java中的封装就是将对象的数据和操作数据的方法相结合,通过方法将对象的数据和实现细节保护起来。 D) Java语言中的多态的含义可以表达为:对外一个接口,内部多种实现。Java语言支持两种多态:运行时多态和编译时多态。 题目8:a 程序如下: public class Demo extends Base { private int count; public Demo() {    System.out.println("A Demo object has been created"); } protected void addOne() { count++; } } 有关类Demo,描述正确的是:(选择1项) A) 当创建一个Demo类的实例对象时,count的值为0。 B) 当创建一个Demo类的实例对象时,count的值是不确定的。 C) 超类对象中可以包含改变count 值的方法。 D) Demo的子类对象可以访问count。 题目9:a 程序如下: class Test { private int day; private int month; public String getDate() { return day+"/"+month; } } class Test2 { public static void main(String[] args) { Test test=new Test(); test.day=25; System.out.println(test.getDate()); } } 有关类的描述正确的是:(选择1项) A) 程序在编译时将出错。在Test中的day为私有变量,所以类外无法访问。 B) 程序能通过编译,但是不能正常运行。 C) 程序能通过编译,运行时将打印出0/0,因为在Java中int型变量day和month默认为0。 D) 以上说法都不正确。 题目10:c 下面关于继承的描述正确的一项是:(选择1项) A) 子类继承父类,那么子类将继承父类的所有内容包括构造方法。 B) 子类继承父类,那么子类可以重写父类的方法,但是一旦重写父类方法后,无法通过子类访问到父类的该方法。 C) 子类继承父类,如果父类中只有一个构造方法并且有参数,那么在子类的构造方法中必须先用super调用父类构造方法并传参。 D) 以上说法都不正确。 题目11:d 程序如下: class Test { private int day; public int month; private Test() { System.out.println("I am Test"); } private void print() { System.out.println("I am print in Test"); } void showme() { print(); } } class TestDemo { public static void main(String[] args) { Test t=new Test() ______________ } } 下面关于类描述错误的一项是: A) Test类的对象t不能直接访问print方法。但是可以通过showme方法来间接调用 print()方法。 B) Test类的对象t可以直接访问month变量,但是不能直接访问day变量,因为day为私有变量,只有类内可以访问。 C) 该程序能通过编译并运行,但是如果想得到输出“I am print in Test”的结果,需要在横线处填写t.showme()。 D) 该程序无法通过编译,因为在Test类中的构造方法被写成私有,那么Test t=new Test() 将无法找到合适的构造方法。 题目12:a 程序如下: class Test { private int day; private Test(int d) { day=d; } private void print() { System.out.println("I am print in Test"); } } class Test2 extends Test { Test() { __(1)__ } void show() { (2) } } 下面说法中正确的是:(选择1项) A) 如果想使程序能够正常运行,在(1)处必须填写super()方法,并且在super中传参给父类且同时该语句必须为Test()构造方法中的第一句。 B) 如果想使程序能够正常运行,在(1)处必须填写super()方法,但是该方法处于Test()构造方法中的任何位置均可以。 C) 在show()方法中无法调用父类的print()方法。 D) 在show()方法中可以为day进行赋值,因为Test2继承了Test,则在Test2中也继承了父类的day变量。 题目13: 下面哪个关键字,使类不能在被其他的类继承?c(选择1项) A) static B) finally C) final D) instance 题目14:a 程序如下: String s1=new String("Hello"); String s2=new String("there"); String s3=new String(); 下面哪个是合法的操作符?(选择1项) A) s3=s1 + s2; B) s3=s1-s2; C) s3=s1 & s2; D) s3=s1 && s2 题目15:b 下列描述中错误的是:(选择1项) A) 在一个类的声明里声明的类,也叫做内部类或嵌套类,内部类可以作为外包类的一个成员使用,可以访问外包类的所有成员,包括私有成员。 B) 内部类的访问权限可以被定义为public、protected、private和default。但是普通类只可以定义public和default两种访问权限。 C) 内部类的访问权限可以被定义为public、protected、private和default。普通类也可以定义上面四种访问权限,但是通常我们只应用public和default两种访问权限。 题目16:c 程序如下:   abstract class MineBase {    abstract void amethod();    static int i;    } public class Mine extends MineBase   {    public static void main(String argv[]) {     int[] ar = new int[5];     for(i = 0;i < ar.length;i++)     System.out.println(ar[i]);    }   } 上面程序运行结果是:(选择1项) A) 打印5个0 B) 编译出错,数组ar[]必须初始化 C) 编译出错,Mine应声明为abstract D) 出现IndexOutOfBounds的异常。 题目17:c 下面关于抽象类描述错误的是:(选择1项) A) 抽象类的关键字是abstract,在抽象类中可以定义变量和方法。 B) 抽象类中的方法如果可以有实现体,如果有实现体,则该方法叫做抽象方法必须加关键字abstract修饰该方法。 C) 抽象类中至少需要有一个方法被定义为抽象方法,在该方法前加abstract,把该方法定义为抽象方法。 D) 抽象类中可以有抽象方法,即所有的方法全部都有实现体。但是依旧不能为抽象类定义对象。 题目18:b 下面关键字中,如果同时出现时,必须放在第一位的是:(选择1项) A) interface B) package C) import D) class 题目19:d 下面关于接口的描述错误的是:(选择1项) A) 定义接口的关键字为interface,接口中可以定义变量,但是必须同时为该变量赋值,接口中的方法默认全部为public类型。 B) 实现接口的关键字是implements,其后可以跟多个接口的名字,即实现多继承。一个类实现了接口,那么必须实现接口中的所有方法。 C) 类实现了接口,必须实现接口中的所有方法,并且接口中的所有方法均为public,在实现类中不可以削弱接口中方法的访问权限。 D) 类实现了接口,实现接口中的方法时可以重写该方法的访问权限,但是无法改变接口中变量的值。 题目20:b 下面关于接口和抽象类的说法中正确的是: A) 抽象类使类与类之间依旧具有父子联系,而接口一般只是定义了一种规范,并不使实现的接口之间具有父子关系。 B) 可以为抽象类定义对象,但是不能为接口定义对象。 C) 抽象类与接口的用法几乎都相同,具体用哪一个方法,只是在于程序设计人员的编程习惯而已。 D) 在Java中,最多使用的是抽象类,因为应用抽象类也可以实现多继承。而接口已经被限制使用。 题目21:d 程序如下: interface Eo { double PI=3.1415926; } abstract class A { void shot() { System.out.println("我是抽象类"); } __(1)____ void duandian(); } __(2)___ class C extends A { void shoo() { System.out.println("dafsdasd"); } } class D extends C implements Eo { void duandian() { System.out.println("我是子类c"+PI); } } class B { public static void main(String[] args) { D t=new D(); t.duandian(); } } 下面完善上面程序(1)和(2)处的方法中正确的是:(选择1项) A) (1)abstract (2)public B) (1)public (2)public C) (1)public (2)abstract D) (1)abstract (2)abstract 题目22:a 下面关于重载描述错误的是:(选择1项) A) 重载方法的返回值必须相同。 B) 重载方法的参数必须有不同之处。 C) 重载方法的名字必须相同,否则就不能称为重载了。 D) 重载方法的返回类型相不相同都可以。 题目23:d 程序如下: class A { static int count=0; int number=0; A() { System.out.println("我是构造函数"); count++; number++; } } class test { public static void main(String[] args) { A t1= new A(); A t2 = new A(); A t3 = new A(); System.out.println(t3.count); System.out.println(t3.number); } } 下面说法中正确的是:(选择1项) A) 输出结果为:count=1,number=3 B) 输出结果为:count=3,number=0 C) 输出结果为:count=0,number=0 D) 输出结果为:count=3,number=1 题目26:b 垃圾回收机制中,系统无法回收的是:(选择1项) A) 那些NULL对象 B) 当窗体显示的时候,指向窗体的对象。 C) 系统资源紧张的时候,一些垃圾资源 题目27:d 下列关于构造方法的说法中错误的是:(选择1项) A) 构造方法的可以被重载。 B) 构造方法不可以有返回类型,但是可以有参数。 C) 构造方法的名字必须与类名相同。 D) 构造方法不可以被覆盖。 题目28:c 所有的异常类皆继承哪一个类?(选择1项) A) java.io.Exception B) java.lang.Throwable C) java.lang.Exception D) java.lang.Error 题目29:d 程序如下:   public class Foo {    public static void main(String[] args) {     try {       return; }     finally { System.out.println("Finally");     }    }   } 上面程序段的执行结果是:(选择1项) A) 程序正常运行,但不输出任何结果。 B) 程序正常运行,并输出 "Finally" C) 编译能通过,但运行时会出现一个异常。 D) 因为有catch语句块,所以不能通过编译。 题目30:b 下面关于修饰符权限的说法中错误的是:(选择1项) A) public说明该类成员可被所有类的对象使用。 B) protected说明该类成员能被同一类中的其他成员、或其子类成员访问,但不能被同一包中的其他类或其他包的非子类访问。 C) 默认的说明该类成员能被同一类中的其他成员、或同一包中的其他类访问但不能被包之外的其他类访问。 D) private说明该类成员只能被同一类中的其他成员访问,不能被其他类的成员访问,也不能被子类成员访问。 题目31:d 下面关于多态的说法中不正确的是:(选择1项) A) 子类不能覆盖超类中的final或 static方法。 B) 子类覆盖超类中同名方法时,子类方法声明必须与超类被覆盖方法的声明一样。 C) 方法重载中参数必须不同,即可以参数个数不同,也可以类型不同; D) 子类必须覆盖超类中的abstract方法。 题目32:b 下面关于数组的定义错误的是:(选择1项) A) int a[]={1,2,3,4,5,6}; B) int a[6]={1,2,3,4,5,6} C) int[][] a; D) int [] a=new int[6]; 题目33:a 程序如下: class Test { public static void main(String[] args) throws ArithmeticException { Demo test=new Demo(); test.div(52,0); System.out.println("我罪"); } } class Demo { public void dv(int x,int y) throws ArithmeticException { System.out.println(x/y); } public void div(int x,int y) throws ArithmeticException { try { dv(x,y); } catch(ArithmeticException e) { System.out.println("我是主犯"); } } } 运行上面的程序输出结果是:(选择1项) A) 我是主犯 我罪 B) 我罪 我是主犯 C) 52/0我是主犯 我罪 D) 程序将抛出异常。 题目34:c 程序如下: class Demo { public static void main(String[] args) { day02 a=new day02(); a.y=45; a.tt(); } } class day01 { private int d; protected int h; public int y; public day01(int a1,int a2) { d=a1; h=a2; } public void tt() { System.out.println("我是day01"+d+h+y); } } class day02 extends day01 { int c; day02() { this(4,9,8); } day02(int b1,int b2,int b3) { super(b1,b2); c=b3; } public void tt() { System.out.println("我是day025"+c); } } 运行程序,输出结果为:(选择1项) A) 我是day0259 B) 我是day014925 C) 我是day0258 D)我是day012945 题目35:b 下面关于数据类型的默认值的说法中不正确的是:(选择1项) A) char类型的默认值为:’\u0000’ B) boolean类型的默认值为:false C) float和double类型的默认值为:0.0 D)int \short \long类型的默认值为:0 E)引用类型的默认值为:null 题目36:b 下列标识符中合法的一项是: A) 2variable B) variable2 C) $another*var D) #myvar 题目38:c 程序如下: class A { (1) final void pr() { System.out.println("dsafa"); } (2) void pr(int a) { a=5; System.out.println("dsafa"); } } class C extends A { (3) void pr() { System.out.println("dsafasdf"); } } class B { public static void main(String[] args) { C t=new C(); (4) t.pr(); } } 上面的程序存在的问题描述正确的一项是: A) 问题出在(1)处,因为final关键字不能修饰方法 B) 问题出在(2)处,该语句与(1)冲突。 C) 问题出在(3)处,该语句不能覆盖父类中的final方法 D) 问题出在(4)处,类C的对象t不能调用未表明访问权限的pr方法。 题目39:c 程序如下: class A { public static void main(String[] args) { Integer ten=new Integer(10); Long nine=new Long (9); System.out.println(ten + nine); int i=1; System.out.println(i + ten); } } 上面的代码 编译会出现什么问题? A) 19 20 B) 19 11 C) 编译出错 D) 10 1 题目40:a 程序如下: public class Test { public static void main(String[] args) { Stu s=new Stu(); s.show(); } } class Stu { static int a=0; int b ; static void show() { b=56; System.out.println("a="+b); } void shot() { b=56; a++; System.out.println("a="+b); } } 对上面程序描述正确的是:(选择1项) A) 静态方法必须访问静态变量和静态方法 B) 非静态方法不能访问静态变量和景泰方法 C) 非静态对象不能调用静态方法 D) 程序可以通过编译,输出结果为:a=56 题目41:d 程序如下: interface Er { double PI=3.14; void tongdian(); void duandian(); } class Dfqc implements Er { public void tongdian() { System.out.println("通电函数"+PI); } public void duandian() { } public void duan() { } } public class Test { public static void main(String[] args) { Dfqc t=new Dfqc(); t.tongdian(); } } 上面的程序,下面描述错误的是:(选择1项) A) 接口中不可以为变量赋值。 B) 在类Dfqc 中,未能实现接口中的duandian()方法,所以不能通过编译 C) 在接口中定义的PI相当于常量,不可以更改数值。 D) 在接口中定义的PI有用final修饰,不是常量,所以可以更改数值 题目42:c 程序如下: interface Eo { double PI=3.1415926; } abstract class A { void shot() { System.out.println("我是抽象类"); } abstract void duandian(); } abstract class C extends A { void shoo() { System.out.println("你好啊"); } } class D extends C implements Eo { void duandian() { System.out.println("我是子类c"+PI); } } class B { public static void main(String[] args) { D t=new D(); t.duandian(); } } 执行上面程序后,输出结果为:(选择1项) A) 我是子类c3.1415926 B) 我是抽象类c3.1415926 C) 你好啊c3.1415926 D) 我是子类我是抽象类c3.1415926 题目43:c 程序如下: public class EqTest { public static void main(String[] argv) { EqTest e=new EqTest(); } EqTest() { String s="Java"; String s2="java"; ________a、_补充代码________ { System.out.println("Equal"); } else { System.out.println("Not equal"); } }} 根据上面代码,如果想输出“Equal”,则横线处需要补充的语句是:(选择1项) A) if(s==s2) B) if(s.equals(s2) C) if(s.equalsIgnoreCase(s2)) D) if(s.noCaseMatch(s2)) 题目44:a 程序如下: public class A { public static void main(String[] argv) { } public void amethod(int i){} __________________________ } 下面哪一项放在横线处构将使程序不能通过编译的?(选择1项) A) public int amethod(int z) { } B) public int amethod(int i,int j) { return 99 ; } C) protected void amethod(long l){ } D) private void anothermethod(){ } 题目45:c 给出定义Integer i=new Integer(99);那么怎样才能设置i的值为12?(选择1项) A) i=12; B) i.setValue(12); C) i.parseInt(12); D) 上述均不对。 题目46:a 程序如下: class A { public static void main(String argv[]) { A mt = new A(); int mt =0; inc.fermin(mt); mt = mt++; System.out.println(mt); } void fermin(int mt) { mt++; } } 上面程序,输出结果为:(选择1项) A) 编译出错 B) 2 C) 1 D) 0 题目47:a 下面的叙述中正确的一项是:(选择1项) A) 在Java中只支持单继承,不支持多继承。 B) 在Java中对于类都可以用private、public、protected修饰符号修饰。 C) 在Java中只有对内部类才可以把类修饰为private类型 D) 在Java中所有一切都是类,有写在类外的代码 题目48:b 下面哪个是Java中的关键字:(选择1项) A) Null B) new C) instanceof D) throws 题目49:c 下面不属于顶层容器的是:(选择1项) A) JFrame B) JDialog C) JPanel D) JApplet 题目50:a 下面哪一项不是awt中的组件:(选择1项) A) CheckboxGroup B) Choice C) TextField D) ButtonGroup 题目51:c 窗体JFrame的默认布局是:(选择1项) A) 网格布局 B) 流式布局 C) 边界布局 D) 卡片布局 E)无布局 题目52:b 面板JPanel的默认布局是:(选择1项) A) 网格布局 B) 流式布局 C) 边界布局 D) 卡片布局 E)无布局 题目53:e Applet的默认布局是:(选择1项) A) 网格布局 B) 流式布局 C) 边界布局 D) 卡片布局 E)无布局 题目54:a 如果要把窗体设置为无布局的形式,那么下面的说法的正确一项是:(选择1项) A) 窗体默认为无布局,所以此时放控件只要直接用setBound()绑定控件位置即可 B) 窗体默认布局为流式布局,所以需要通过方法设置布局为null C) 窗体默认布局为边界布局,所以要用setLayout(null);设置窗体的布局为空。 D) 上述说法均错误。 题目55:d 下面哪个方式可以实现与GridBagLayout的功能雷同:(选择1项) A) FlowLayout B) GridLayout C) BorderLayout D) 无布局,通过绑定进行定位。 题目56:c 设置面板的布局方式为边界布局,在面板中直接放一个按钮,那么该按钮的位置为:(选择1项) A) CENTER B) NORTH C) SORTH D) WEST E) EAST 题目57:b 下面哪个选项可以实现为文本区添加滚动条:(选择1项) A) JFrame jf=new JFrame(); JTextArea jt=new JTextArea(10,20); JScrollBar jsb=new JScrollBar (jt); jf.getContentPane().add(jt); B) JFrame jf=new JFrame(); JTextArea jt=new JTextArea(10,20); JScrollPane jsp=new JScrollPane(jt); jf.getContentPane().add(jsp); C) JFrame jf=new JFrame(); JTextArea jt=new JTextArea(10,20); JScrollBar jsb=new JScrollBar(jt); jf.getContentPane().add(jsb); D) JFrame jf=new JFrame(); JTextArea jt=new JTextArea(10,20); JScrollPane jsp=new JScrollPane(jt); jf.getContentPane().add(jt); 题目58:a 下面哪个可以相应鼠标的点击事件:(选择1项) A) JMenuItem B) JMenu C) JMenuBar D) JToolBar 题目59:b 下面描述中,正确的是:(选择1项) A) JPasswordField的直接父类是javax.swing.JTextComponent B) JTextArea可以设置行宽和列宽,而JTextField是单行文本,只能设置列宽。 C) JCheckBoxMenuItem和JRadioButtonMenuItem的父类是JMenu。 D) JPasswordField的直接父类是javax.swing.JTextArea 题目60:a MVC设计模式中的M\V\C别表示什么意思?(选择1项) A) M:模型-数据(服装); V:视图(服装模特) C:控制器(服装设计师) B) M: 视图(服装模特); V:模型-数据(服装) C:控制器(服装设计师) C) M:模型-数据(服装); V:控制器(服装设计师)C:视图(服装模特) D) M: 控制器(服装设计师)V:视图(服装模特) C:模型-数据(服装); 题目61:b 下列关于SWING和AWT的对比说法错误的是:(选择1项) A) swing包对awt包进行了修订和扩展 B) swing的类依然含有与平台相关的技术,只是比AWT大大减少了 C)swing中的类基本上都是以字母“J”开头 D)swing的各种控件类的父类的JComponent类继承于awt包的Container类。 题目62:a 每个________对象都有一个与它相关的布局管理器。(选择1项) A) Container B) Component C) Object D) Layout 题目63:b 下面哪个选项为Swing组件提供了处理所有与滚动条相关的动作。(选择1项) A) ScrollPane B) JScrollPane C) ScrollBar D) JScrollComponent 题目64:a 以下关于各个菜单类之间的关系的描述正确的是:(选择1项) A) JMenuBar包含JMenu包含JMenuItem B) JMenuBar包含JMenuItem包含JMenu C) JMenuItem包含JMenu包含JMenuBar D) JMenu包含JMenuBar包含JMenuItem 题目65:d 一个事件源要必须注册监听器才能接受一个事件通知,以将产生的事件对象传输给_________来处理。(选择1项) A) 事件代理(监听器) B) 事件源 C) 主程序 D) 事件处理方法 题目66:b 事件对象的方法:getSource()返回的是:___________ (选择1项) A) Component B) Object C) JComponent D) Container 题目67:c 调用键盘事件的什么方法可以获得按键的名称。(选择1项) A) k.getKeyCode(k.getKeyText()) B) k.getKeyText() C) k.getKeyText(k.getKeyCode()) D) k.getKeyChar() 题目68:c 下面哪一项不属于Applet的生命周期:(选择1项) A) void init() B) void start() C) void paint() D) void destroy() 题目69:c 关于getCodeBase()与getDocumentBase()方法,下面叙述中正确的是:(选择1项) A) 两个方法功能相同。 B) getCodeBase方法用于从浏览器获取Applet的URL地址;而getDocumentBase方法用于从浏览器获取Applet所嵌入的HTML文件的URL地址; C) getCodeBase方法用于从浏览器获取Applet所嵌入的HTML文件的URL地址; getDocumentBase而方法用于从浏览器获取Applet的URL地址; D)上述说法均不正确。 题目70: 程序如下: import java.io.*; class ExBase { abstract public void martley() { } } public class MyEx extends ExBase { public static void main(String[] argv) { DataInputStream fi = new DataInputStream(System.in); try{ fi.readChar(); }catch(IOException e){ System.exit(0); } finally {System.out.println("Doing finally");} } } 编译并运行下列代码,将会发生什么事情?(选择1项) A) 编译出错。 B) 程序将运行,等待按任意键退出。 C) 程序将运行,等待你按键,然后打印出"Doing finally" 然后退出。 D) 程序运行,然后立即退出。 题目71: 程序如下: public class Borley extends Thread { public static void main(String[] argv) { Borley b = new Borley(); b.start(); } public void run() { System.out.println("Running"); } } 下面描述正确的是:(选择1项) A) 通过编译和运行但是有任何输出。 B) 通过编译,运行后输出"Running" C) 编译出错有线程可供运行 D) 编译出错有权限使用Thread 题目72: 程序如下: import java.io.*; public class Ppvg { public static void main(String argv[]) { Ppvg p = new Ppvg(); p.fliton(); } public int fliton() { try{ FileInputStream din = new FileInputStream("Ppvg.java"); din.read(); }catch(IOException ioe){ System.out.println("flytwick"); return 99; }finally{ System.out.println("fliton"); } return -1; } } 编译和运行上面的代码,下面对这段程序的描述中正确的是:(选择1项) A) 程序可以正常运行并且仅仅输出 "flytwick" B) 程序可以正常运行并且仅仅输出"fliton" C) 程序可以正常运行并且输出"fliton" 和 "flytwick" D) 在编译的时候会产生错误,因为fliton方法会要求返回两个值 题目73: 下面哪个关键字能够引起死锁:(选择1项) A) synchronized B) suspend C) transient D) volatile 题目74: 关于Applet的生命周期说法中正确的是:(选择1项) A) init方法在start方法之后执行 B) stop在Applet退出时被调用,只调用一次 C) destroy方法在stop方法之前被调用 D) stop在Applet 不可见时被调用,可以被调用多次 题目75: 关于Runnable接口,不正确的说法是:(选择1项) A) 实现了Runnable接口就可以用start方法启动 B) Runable接口提供了通过线程执行程序的最基本的接口 C) Thread类实现了Runnable接口 D) Runnable只定义了一个run方法 题目76: 下面说法不正确的是 :(选择1项) A) Java中线程是抢占式的 B) Java中线程是时的 C) Java中的线程可以共享数据 D) Java中的线程可以共享代码 题目77: 下面属于Java线程同步方法的方法有:(选择1项) A) stop B) run C) wait D) destroy 题目78: 下面哪个方法是不过时的:(选择1项) A) suspend B) interrupt C) resume D) stop 题目79: 下面哪个语句能够正确地创建一个InputStreamReader的实例?(选择1项) A) new InputStreamReader("data"); B) new InputStreamReader(new FileReader("data")); C) new InputStreamReader(new BufferedReader("data")); D) new InputStreamReader(System.in); 题目80: FilterOutputStream 是BufferedOutputStream 、DataOutputStream 和 PrintStream的父类. 哪个类是能够构造一个 FilterOutputStream对象?(选择1个) A) InputStream B) OutputStream C) File D) RandomAccessFile 题目81: 创建一个socket对象,连接到一个标准远程网络服务器端。下面哪个方法最适合在线从socket上读取一个ASCII数据:(选择1项) A) InputStream in=s.getInputStream(); B) DataInputStream in=new DataInputstream(s.getInputStream()); C) ByteArrayInputStream in=new ByteArrayInputStream(s.getInputStream()); D) BufferedReader in=new BufferedReader(new InputStreamReader(s.getInputStream())); E) BufferedReaderin=newBufferedReader(new InputStreamReader(s.getInputStream()),”8859-1”); 题目82: 下面哪一个方法是鼠标移动(MouseMotionListener)接口中方法的实现:(选择1项) A) Public void mouseMoved(MouseEvent) B) Public boolean mouseMoved(MouseEvent) C) Public void mouseMoved(MouseMotionEvent) D) Public boolean MouseMoved(MouseMotionEvent) 题目83: 1. ___补充代码 2. public class foo ( 3. public static void main (String[]args) throws Exception { 4. printWriter out = new PrintWriter (new 5. java.io.outputStreamWriter (System.out), true; 6. out.printIn(“Hello”); 7. ) 8. } 在上面程序的第一行填写代码,使程序能正常编译和运行。(选择1项) A) Import java.io.PrintWriter; B) Include java.io.PrintWriter; C) Import java.io.OutputStreamWriter; D) Include java.io.OutputStreamWriter; 题目84: 下面不正确的论述有:(选择1项) A) ServerSocket.accept是阻塞的 B) BufferedReader.readLine是阻塞的 C) DatagramSocket.receive是阻塞的 D) DatagramSocket.send是阻塞的。 题目85: 下面关于阻塞函数的论述,正确的有:(选择1项) A)阻塞函数是指可以返回也可以不返回的函数 B)阻塞函数是指网络过于繁忙,函数必须等待 C)阻塞函数是指有外部事件发生才会返回的函数 D)阻塞函数如果不能马上返回,就会进入等待状态,把系统资源让给其他线程。 题目86: 下面哪个URL是合法的:(选择1项) A)http://166.111.136.3/index.html B)ftp://166.111.136.3/incoming.html C)ftp://166.111.136.3:-1/ D)http://166.111.136.3.3 题目87: 关于TCP/IP协议下面哪几点是错误的:(选择1项) A)TCP/IP协议由TCP协议和IP协议组成 B)TCP和UDP都是TCP/IP协议传输层的子协议 C)Socket是TCP/IP协议的一部 D)主机名的解析是TCP/IP的一部 题目88: 关于数据报通信(UDP)和流式通信(TCP)的论述,正确的有:(选择1项) A) TCP和UDP在很大程度上是一样的,由于历史原因产生了两个不同的名字而已 B) TCP和UDP在传输方式上是一样的,都是基于流的但是TCP可靠,UDP不可靠 C) TCP和UDP使用的都是IP层所提供的服务 D) 用户不可以使用UDP来实现TCP的功能 题目89: 下列说法中正确的一项是:(选择1项) A) 普通类都可以用private、public等修饰符修饰。 B) 内部类可以访问外部类的普通变量。 C) 内部类不可以用private修饰。 D) 内部类可以访问外部类的static类型的变量。 题目90: Java提供的网络功能有三大类,关于其描述如下,正确是:(选择1项) A)URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据. B)Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道. C)Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上. D)上面三种说法都对! 题目91: 在ODBC模型中,最终是通过哪一个来操作数据库的。(选择1项) A)ODBC接口 B)驱动程序管理器 C)数据库的ODBC驱动程序 D)以上都不是 题目92: 在jdbc:odbc:student中,odbc是下面的哪一个描述:(选择1项) A)协议名 B)驱动程序名 C)子协议名 D)桥接器 题目93: 对于SQL的检索操作,使用Statement的什么方法?(选择1项) A)ExecuteQuery() B)ExecuteUpdate() C)ExecuteSelect() D)ExecuteAlter() 题目94: 下面关于事务的说法中不正确的是:(选择1项) A)事务是保证数据库中数据的完整性与一致性的重要机制 B)事务是由一组SQL语句组成。 C)当一个事务执行过程中出现异常而失败时,为了保证数据的一致性,该事务必须回滚。 D)一个事务会出现的异常是:SQLErrorException。 题目95: 获得数据库连接的方法是:(选择1项) A)createStatement() B)getConnection() C)Class.forName() D)以上都不对 题目96: 下面选项中不是SQL语句的API的是:(选择1项) A)java.sql.Statement; B)java.sql.ResultSet; C)java.sql.PrepareStatement; D)java.sq.Connection; 题目97: 下面哪个是存储过程调用的语句:(选择1项) A)CallStatement B)PreparedStatement C)CallableStatement D)以上都不是 题目98: 下面哪个不是JDBC的URL的三个组成部的。(选择1项) A)指示部 B)数据库名 C)子协议部 D)数据源名 题目99: 使用JDBC,可为四个步骤,下面四个步骤的排序正确的是:(选择1项) A)释放对象 语句处理 结果处理 创建连接 B)语句处理 结果处理 创建连接 释放对象 C)创建连接 语句处理 结果处理 释放对象 D)创建连接 结果处理 语句处理 释放对象 题目100: 在使用JDBC的许多方法中,方法的调用顺序正确的一项是: A)getConnection() getString() createStatement() executeQuery() B)getConnection() createStatement() executeQuery() getString() C)createStatement() getConnection() executeQuery() getString() D)createStatement() getConnection() getString() executeQuery()

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧