《Eclipse从入门到精通》常见问题解答

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:

附录 B  读者提问精选(第二次印刷)

起步篇

问:为什么我的 Swt-Designer 安装总是不成功?

答:将安装步骤要点简述如下:

 1 )下载

笔者于 2005  8 月重新去 http://www.swt-designer.com/ 网站下载了用于 eclipse3.0.1  Swt-Designer 。现在它已经升级到了 4.1.0 GA 2005.07.09 ,本书中使用的是 2.1.0 GA 2004.08.19 。不过两个版本的安装和使用方法基本相同。

 2 )安装

将下载 Swt-Designer 得到的 ZIP 包解压,然后将解压后得到的“ features  plugins  designer-delete.bat ”复制到 eclipse 的安装目录下。这时因为 eclipse 的安装目录已经存在 features  plugins 目录,故而会弹出一个提示框问你是否覆盖目录,回答“是”。

如果还没出现第 48 页的“图 6.2 ”所示界面,把 eclipse 下的 configuration 目录删除( eclipse 在其中缓存了一些文件),再启动 eclipse 。注意:对于 Eclipse3.1 版,必须保留 configuration 目录下的 config.ini 文件。

 3  link 式的安装

如果你选择第 2 章介绍的 link 式插件安装方法,则必须注意一点: Swt-Designer  ZIP 包解压后, features  plugins 并没有被包含在一个 eclipse 目录下, WEB 篇的 lomboz 插件安装也有同样的问题。正确的目录结构请参考第 421 页的“图 23.12”,在此页第八行已经有“注意”的提示,但还是有不少读者忽略了这一要点。

问:用 Swt-Designer 向导新建一个 swt 项目时,并没有自动生成 src 目录下的包“ package com.swtdesigner.ResourceManager ”和类文件 resourcemanager.java ,如第 48 页的图 6.4 ,请问怎么办?

答:本书所用 Swt-Designer  2.1.0 GA 版,如果你用 4.1.0 GA 版,则此新版本不会自动生成 src 目录下的包和类文件。其实这个自动生成的类文件,并没有太大用处,笔者在开发时常常把它删除掉。如果你想看一下此文件的代码,在随书光盘里有它的源文件。

问:在公司无法注册激活 SWT Designer ,提示“ Transaction failed:Internal Server Error ”。

答:很可能是公司网络做了限制的原因,比如把 SWT Designer 激活时的响应端口给封掉了。可以尝试以下解决方法:

 1 )通过一台可以上网的电脑(比如家里的)将 SWT Designer 注册好,然后把协议文件 C:\Documents and Settings\ [UserName]\Instantiations.license 从你家里复制到公司电脑上。

 2 )书中关于 SWT Designer 的内容只占很少(仅第 6 章),第 7 章之后的 SWT/JFace 例程是完全可以脱离 SWT Designer 而运行的。 SWT Designer 仅仅是一个界面辅助设计工具,它对 SWT 编程不是必须的。你可以参照随书光盘里的视频,不必用 SWT Designer 项目创建向导就能将光盘上的项目安装起来,并顺利运行书中的所有 SWT/JFace 例程。

问:按照书上注册好了,但还是出现了“ Activation is complete.Thank you.   

答:此句英文意思是“已完成激活”,也就是说你已经注册成功了。

问:执行 “cvs 提交  命令时,服务器报告错误,怎么办?错误信息如下:

myproject: cvs server: C:\WINDOWS\TEMP\cvs6C.tmp: No such file or directory

myproject: cvs [server aborted]: error diffing HelloWorld.java

答:这是由于 CVS 用户对 “C:\WINDOWS\TEMP\” 没有权限造成的,解决方法有如下三种:

 1 )通过 CVSNT 控制面板“ Advanced ”选项卡下的“ Temporary ”,重新换一个此 CVS 用户具有读写权限的目录。

 2 )用 Windows 管理工具把“ C:\WINDOWS\TEMP\ ”的读写权限赋予此 CVS 用户。

 3 )将此 CVS 用户设成 WINDOWS 的超级用户。

问:第 33 页有一个命令“ cvs -d c:\cvsfile passwd -a giles ”。我的系统是 windows 2000 ,用户名为 i love you ,密码为 12345678 。请问就我的情况,上面这个 cvs 命令应该怎么样写才正确。

答:如果此用户名没有空格,则命令如下: cvs -d c:\cvsfile passwd -a iloveyou ,回车后再输入两次 12345678 。如果此用户名中有空格,则可以用双引号把用户名引起来,命令如下: cvs -d c:\cvsfile passwd -a "i love you" 。如果想更稳妥一些,建议在安装好 CVS 后,创建一个新的 windows 用户来给 cvs 用,注意:这并不要求你事先用此新 windows 用户来登录 windows 

问:我下载的 JDK  1.4.2_08 版,书中所用是 1.4.2_06 版,可以吗?

答:完全可以。本书对 JDK 版不敏感,只要是 1.4.2 以上就行。理论上对 1.5  JDK 也支持,但本书不推荐。

问:请问 Eclipse3.1 的多国语言包有吗?

答: Eclipse 还没有发布 3.1 版的多国语言包。备注:笔者 2005  9  8 日做的检查。

SWT/JFace 

问:我按照书中导入 JFace 的方法导入了 swt.jar ,编译没有任何问题,但是运行 SWT 程序时还是出现下面的异常,这是怎么回事?

Exception in thread "main" java.lang.UnsatisfiedLinkError: no swt-win32-3063 in java.library.path 
at java.lang.ClassLoader.loadLibrary(Unknown Source)

  另外我有一个关于 SWT/JFace 的疑惑:在 eclipse 环境下写的程序如果用了 SWT/JFace 包中的类,在 eclipse 下运行当然没问题,但是如果拿到一个只有 jdk 的环境下运行, jdk 中没有它所需要的 SWT/JFace 中的类,它还能运行吗?

回答:第一个问题参考书第 49 页的“导入 SWT 的原生库”。第二个问题参考第 21 章的“项目的打包与发行”,关键在第 274 页的第二行。

问:我在运行程序时出了 java.lang.NoClassDefFoundError 异常,怎么办?异常信息如下:

Exception in thread "main" java.lang.NoClassDefFoundError: org/osgi/framework/InvalidSyntaxException

答: NoClassDefFoundError 异常是因为找不到所需类引起的,对于 SWT 程序,则根本原因是没有配置好 SWT 类库。很多读者以为把 swt.jar 加入库引用, Eclipse 界面上没有错误就行了,但 SWT 程序在运行时还需要一些其他 JAR 包来支持,如上面提示的 osgi JAR 包。解决方法如下:

 1 )参考第 26 页的中间段落有对库引用的解释。

 2 )参考第 48 页底部的“注意”。

 3 )参考随书光盘的 " 第二篇   SWT_JFace  (6-16  )\myswt" 目录下的 SWT 项目的库引用 ".classpath" 文件,通过它你可以知道 SWT 项目所需要 JAR 包。

问:在练习第 53  55 页的例子时,我导入了 SWT 的原生库,但在调试过程还是出现了错误。错误信息如下:“ Fatal exception occurred.Program will exit  

答:参考第 48 页或第 211 页的方法,先创建一个完整的 SWT 项目。注意:仅导入 SWT 的原生库是不够的,还要设置对 SWT 及其相关库的库引用等。

问:在书中第 50 页建立“ Application Window ”时,无法完成,提示如下: This wizard is  not supported in free version of the product . Swing Object construction is only available in the professional edition.

答:从出错提示“ Swing Object  ……”中的 Swing ,可知你用错了一个 wizard  Swt-Designer free 版的只支持 SWT 不支持 Swing ,本书的内容是关于 SWT 的,和 Swing 无关。

问:为什么我写了一个继承自 Shell 类的程序( public class PuzzleFrame extends Shell )总是出错呢,出错信息为: Exception in thread "main" org.eclipse.swt.SWTException: Subclassing not allowed:

答: Shell 是可以被继承的,但 Shell 的父类 Decorations 有一个 checkSubclass () 函数,当其子类不符合此方法的检查规则时,就会抛出异常。因此不是简单继承 Shell 就行了的,还要做一些比较复杂的工作。此外,软件设计原则告诉我们:“聚合优于继承”,如果可以不通过继承 Shell 来达到使用它的目标,那就尽量采用简单的方式吧,至少笔者在项目开发中,从未通过继承的方式来使用过 Shell 

问: Display.syncExec()  Display.asyncExec() 的区别,两者有什么不同?

答: syncExec()  asyncExec() 方法是外部线程调用本地线程的桥接方法。 syncExec 是必须等待调用结束后才可以进行到后面的流程,而 asyncExec 是调用的线程无需等待就可以进行后面的流程。

问: MessageDialog.openInfomation ,我想调整这个窗口的大小

答:不妨改用 MessageBox 类,参考第 195 页。

插件开发篇

问:书上有查找和打开编辑器的方法,但有没有得到一个编辑器对象 EditorPart 的方法?然后对这个对象可以进行操作,例如传一个参数。

答:

 1 )第 231 页的第五行的 editor ,它就是一个编辑器( EditorPart )对象。

 2 )关于给编辑器传参数,这里介绍一种间接的方法:给 EditorInput 对象增加一个属性字段,而通过 EditorPart 类中的 init 方法(第 228 页第一行),就能得到传入的 EditorInput 对象,从而取出 EditorInput 对象所携带的数据。这样数据参数用EditorInpurt 做中间载体,就传给了 EditorPart 编辑器。

问:如果我的程序不是插件,而且传统应用程序。第 18.8 节所讲制作帮助的方法,对于我来说就无效了,请问我该如何来制作帮助呢?

答:给传统应用程序制作帮助比较麻烦,建议你看看 Eclipse 中最新的 RCP 开发, RCP 它结合了插件和传统应用程序的优点:实际上是插件的开发方式,表面上看起来却象一个完完全全的传统应用程序。

问:第 300 页的程序出现以下错误:

java.lang.NoClassDefFoundError: org/aspectj/lang/Signature 
at java.lang.Class.forName0(Native Method) 
at java.lang.Class.forName(Unknown Source)

答:错用了连接包 mysql-connector-java-3.1.10-bin-g.jar ,应该用 mysql-connector-java-3.0.17-ga-bin.jar

WEB 

问:第 24 章说到把 j2src 的文件输出到 "hello\WEB-INF\classes" 下,把随书光盘上第 22 章的 sms\src 目录下的文件拷到相应目录就行了?我发现光盘的 "hello\WEB-INF\classes" 目录下并没有任何文件,我有点迷惑 *.class 文件到底应该放在哪里?

答:如果照第 433 页的“图 24.1 ”所示做好了设置,则 eclipse 会自动将源文件编译成 *.class 文件,并输出到“ hello\Web-INF\classes" 目录下。所以随书光盘上没有必要在 "hello\Web-INF\classes " 目录下保留着 *.class 文件。

问:我想在 Eclipse 中加入 Struts ,看到第 25 章说把 lib 下的 *.jar 复制到 hello/WEB-INF/lib 目录下。我没有看过本书的任何一章,不知道这个 hello/Web-INF/lib 的绝对路径是多少?

答:参阅第 425 页的“图 23.20 ”,绝对路径是 c:/elcipse/workspace/hello/Web-INF/lib 。另:本书 WEB 篇的每章都有前后承接关系,建议从第 23 章看起。

问:在搭建 J2EE 开发平台中,是否要安装 J2EEsdk 

答:不需要安装。

问:我看有的书讲 Hibernate 的安装,并没有提到要使用 Tomcat 等服务器,不知是什么原因?

答: Hibernate 并不是只能用于 B/S 结构的 WEB 开发,对于 C/S 结构的应用程序也一样可以用。也就是说, Tomcat  WEB 服务器和 Hiberate 没有必然的依赖关系。

问:第 450 页的 LogonAction.java 与光盘上的代码不一致

回:此项目的代码按照开发进度,打成了不同的 CVS 版本(参考第 416 页倒数第二段的说明)。光盘代码上显示的都是 CVS 上的最终版本,当然和书上的之前版本的代码不同了。建议你先将光盘“ cvsfile ”目录安装到你的 CVS 上(安装参见光盘所带视频),这样就能从 CVS 上检出前一个版本的代码了。

问: JSP 程序连接 MySQL 数据库出错,出错信息如下:

HTTP Status 500 - 
……(省略)

root cause 
Unable to find a javac compiler; 
com.sun.tools.javac.Main is not on the classpath. 
Perhaps JAVA_HOME does not point to the JDK 
org.apache.tools.ant.taskdefs.compilers.CompilerAdapterFactory.getCompiler(CompilerAdapterFactory.java:106)

答:从出错信息中的“ Perhaps JAVA_HOME does not point to the JDK  ”,可知原因是找不到 JDK ,所以 JSP 无法编译。估计是你在安装 Tomcat 时步骤有误,检查一下第 419 的“图 23.7 ”这一步。如果还不行,那就设置一个指向 JDK 目录的Windows 环境变量 JAVA_HOME 

问:我按第 23 章成功安装了 Tomcat5.0.28  lomboz ,但新建了一个 J2EE 项目后,怎么不能在项目中启动 Tomcat 了,控制台的错误信息如下:

2005-8-3 10:17:18 org.apache.coyote.http11.Http11Protocol init 
严重 : Error initializing endpoint 
java.net.BindException: Address already in use: JVM_Bind:8081 
2005-8-3 
10:17:18 org.apache.catalina.startup.Catalina load

答:注意到异常信息中的“ Address already in use: JVM_Bind:8081 ”,得知 8081 端口已经被其他程序占用了。可能是你启动了两次 Tomcat ,或者是 8081 端口被其他 WEB 软件占用了。


附录C  读者提问精选(第三次印刷) 

问:安装Oralce后,Eclipse无法启动,总报找不到jre的错误。
答:Eclipse只有一个依赖,就是JRE(JAVA运行时环境)。Oralce自带了一个jre1.3,所以可能会对我们装JDK的jre1.4型成冲突,Eclipse不知道要定位哪一个jre。解决方法有如下三种:
(1)在windows环境变量里,创建变量JAVA_HOME= C:\jdk,并把Path变量中c:\jdk\bin的位置提到前面
(2)运行Eclipse时加上参数:eclipse -vm c:\jdk\jre\bin\javaw
(3)将c:\jdk的jre目录复制到C:\eclipse3.0.1\eclipse目录下

问:我安装的是最新版本eclipse3.1.1,按照书上的操作方法把多国语言包安装后,已经实现大部分菜单汉化,但是还有一些菜单没有汉化。然后我又把configuration文件夹删除掉,重新打开eclipse却出现错误,Eclipse无法启动了。
答:
(1)学习本书建议使用eclipse3.0.1版。
(2)eclipse3.1.1的语言包已经分成了两个,你可能只安装了一个,所以汉化不完整。
(3)eclipse3.1.1不能删除configuaration目录,里面的config.ini必须保留。也可以在运行eclipse时加一个clean参数,如:eclipse.exe -clean

问:我在自己的电脑安装了CVSNT,我也可以用Eclipse连上它,但我的同事却连不进来。为什么?
答:连不上CVS的原因有很多种,你的情况很可能是Windows XP防火墙的原因,你关掉防火墙再试试吧。
问:行了,我把XP的防火墙关掉后,我同事可以连进来了。不过,不用防火墙,那电脑就容易中毒,有更好的解决方法吗?
答:防火墙是防黑客的,不是防病毒的。解决方法还是有的,你可以在防火墙的设置里,把CVS服务的端口号打开。具体操作如下:控制面板->高级->设置(T)...->服务->添加(D)...,打开"服务设置"窗口后,"服务描述"填"cvsnt服务";"计算机名称"填你的计算名或IP;服务的外部内部端口号填2401。

问:用Canvas显示图片,如果图片大,怎么使用滚动条?
答:new Canvas(shell, SWT.BORDER|SWT.H_SCROLL|SWT.V_SCROLL);

问:在运行Java应用程序时,可以连上数据库。但当运行插件时(即"运行时工作台")却连不上数据库了,不知为何?
答:有可能是插件没有找到mysql的jar连接包的原因。注意P299最后一段的说明。

问:我在"连接MySQL的测试程序"时出现了下面的错误,会不会是版本冲突的错误:
java.sql.BatchUpdateException: Syntax error or access violation message from server: "Unknown table engine 'lnnoDB'"
答:不是版本的错误,是你写的"lnnoDB"有问题,它的第一个字母应该是字母I(大小写不区分),不是数字1,也不是字母L。以后实践时最好复制随书光盘上的代码,以确保正确。

问:如何在RCP程序启动时打开默认的Edit,该在那里加代码?
答:WorkbenchWindowAdvisor的继承类,改写它的postWindowOpen方法

问:在Text上加了addVerifyListener后,就不能将字符复制到text中了。请问有什么好的方法既可以实现对输入的校验,又可以实现对复制的数据进行校验。
答:你想将字符以复制的方式输入到Text中,那么就不要用addVerifyListener这种在输入时就做实时检查的方式。可以选择在最后提交时,再去校验数据的方式。

问:我想将浏览器嵌入到Ecplise,请问怎么做?
答:用org.eclipse.swt.browser.Browser类。

问:有的可视化组件在SWT Desiger找不到,ScrolledComposite。但是写程序可以用它,就是没法像button按扭直接拖放,是不是要自己定制一个这样的组件用?
答:SWT Desiger中只包含了一些常用的组件,如书中所强调,一定要学会脱离SWT Desiger这类UI设计工具自己手工写界面代码。

问:我在导入随书光盘中的项目后,在运行时提示:"类路径引用的归档 D:/Eclipse/eclipse/language/eclipse/plugins/org.eclipse.core.runtime.nl1_3.0.1/nl1.jar 不存在。"请问是怎么回事?如何运行光盘中的实例?
答:出这个错误,可能是因为
(1)你没用和本书相同版本的Eclipse,或者Eclipse安装目录和本书的不一样
(2)你没有装Eclipse语言包,或者Eclipse语言包安装目录和本书的不一样
解决方法:把Eclipse的构建路径中的对org.eclipse.core.runtime.nl1_3.0.1/nl1.jar重新指定到实际的位置就可以了(构建路径在哪里,请参考本书P444图25.1)

目录
相关文章
|
6月前
|
Android开发
10activiti - 入门demo(Eclipse)
10activiti - 入门demo(Eclipse)
24 0
10activiti - 入门demo(Eclipse)
|
11月前
|
Go Android开发
开心档-软件开发入门之Eclipse 添加书签
Eclipse 中可以在编辑器的任意一行添加书签。 您可以使用书签作为提示信息,或者使用书签快速定位到文件中的指定的行。
|
Java 应用服务中间件 Apache
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
195 0
Java Web入门之开发环境的搭建(包括下载Tomcat和 Eclipse for Java EE)
|
XML Java API
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
Spring框架入门以及Eclipse创建 Spring项目
|
XML Java Android开发
SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目
Spring Boot是一个简化Spring开发的框架,用来监护spring应用开发,约定大于配置,去繁就简,just run 就能创建一个独立的,产品级的应用。我们在使用Spring Boot时只需要配置相应的Spring Boot就可以用所有的Spring组件,简单的说,spring boot就是整合了很多优秀的框架,不用我们自己手动的去写一堆xml配置然后进行配置。所以springboot在java开发中也变得越来越重要,这里总结一下如何使用IDEA和Eclipse创建一个简单的springboot项目。
381 0
SpringBoot入门:使用IDEA和Eclipse构建第一个SpringBoot项目
|
Java Maven Android开发
Maven入门及在eclipse中配置
Maven入门及在eclipse中配置
156 0
Maven入门及在eclipse中配置
|
Android开发 数据库
GEF入门实例_总结_04_Eclipse插件启动流程分析
一、前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件。 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们将通过这几个文件来了解Eclipse插件的启动过程。
1386 0
|
Android开发
Eclipse插件开发_学习_02_GEF入门实例
一、前言 这一节,我们将会创建一个GEF入门实例     二、新建RCP项目 1. New 一个 Plug-in Project     2.输入项目名 项目名:com.ray.gef.
1744 0
|
Android开发
[Eclipse]GEF入门系列(五、浅谈布局)
虽然很多GEF应用程序里都会用到连接(Connection),但也有一些应用是不需要用连接来表达关系的,我们目前正在做的这个项目就是这样一个例子。在这类应用中,模型对象间的关系主要通过图形的包含来表达,所以大多是一对多关系。
1505 0

推荐镜像

更多