2012-02-07 63 views
0

我是新来的Java和Eclipse的IDE。我可以将用户软件包加载到eclipse中以便在启动时运行以及如何操作?

我运行Eclipse

的Eclipse SDK 版本:3.7.1 版本ID:M20110909-1335

在Windows Vista的机器。

我正在尝试从Java中的Thinking4书中学习。 作者使用他自己的软件包来减少打字。然而,作者没有使用Eclipse,这是问题所在。

这是本书中的代码示例。

import java.util.*; 
import static net.mindview.util.print.*; 
public class HelloWorld { 


public static void main(String[] args) { 
    System.out.println("hello world"); 
    print("this does not work"); 
} 

这是print.Java

//: net/mindview/util/Print.java 
    // Print methods that can be used without 
    // qualifiers, using Java SE5 static imports: 
    package net.mindview.util; 
    import java.io.*; 

    public class Print { 
    // Print with a newline: 
     public static void print(Object obj) { 
     System.out.println(obj); 
    } 
    // Print a newline by itself: 
    public static void print() { 
    System.out.println(); 
    } 
    // Print with no line break: 
    public static void printnb(Object obj) { 
    System.out.print(obj); 
    } 
    // The new Java SE5 printf() (from C): 
    public static PrintStream 
    printf(String format, Object... args) { 
    return System.out.printf(format, args); 
    } 
    } ///:~ 

的内容,我得到的最错误是在声明。

Import static net.mindview.util.print.*; 

在此staement Eclipse IDE中说,它无法解析网络

也对

 print("this does not work"); 

Eclipse IDE中说,类印刷()不为类HelloWorld的存在。

我一直在试图让这些工作,但只有有限的成功,该书的其余部分使用另外32个这些包。

我试图将目录添加到类路径,但似乎只有在使用JDK编译器时才有效。我试图将它们添加为库,并且我试图将它们导入到项目中的源文件中的包中。我尝试了其他一些东西,但现在不能记住它们。

我已经能够使其中的一个文件工作,我在此消息中列出的print.java文件。我通过创建一个新的源文件夹然后在该foldeer中创建一个新包然后将print.java文件导入到包中来实现这一点。 但下一次我尝试同样的事情,它不适合我。

我需要的是一种让Eclipse在启动时加载所有这些.java文件的方式,所以当我需要它们用于练习本书时,它们将在那里为我工作,或者只是一个简单的方法来使它们每次工作。

我知道我不是唯一一个遇到过这个问题的人,我在谷歌搜索上看到了关于它的其他问题,并且他们也在问Java Thinking中的书。 我已经搜索过这个网站和其他人,只是没有任何运气。

任何与此或sugestions的帮助是受欢迎的,非常赞赏。

谢谢

好,我已经试过像你说的,我已经开始了一个新的项目,我删除从import语句静态得到这个工作,我再创建一个新的源文件夹,然后我创建了一个源文件夹中的新包。然后我导入了文件系统并选择了net.mindview.util文件夹。

现在,移民声明不再给我一个错误。但是在print语句中,使print语句工作的唯一方法是使用其完全限定的名称。这是代码。

  import net.mindview.util.*; 
     public class Hello2 { 

public static void main(String[] args) { 
    Hello2 test = new Hello2(); 
    System.out.println(); 
    print("this dooes not work"); 
    net.mindview.util.Print.print("this stinks"); 

} 

    } 

上打印语句的错误是: 的方法打印(字符串)是未定义的类型Hello2

,如果我尝试运行它,我得到的错误是:在线程 异常“主 “java.lang.Error的:未解决问题汇编: 的方法打印(字符串)是未定义的类型Hello2

at Hello2.main(Hello2.java:6) 

的声明::::: net.mindview.util.Print.print(”这个臭味“)是完全的q不会出现错误,但它确实完全破坏了print.java文件的用途。 如果您有任何问题,请尽快回复我。

回答

0

ü应该导入包static net.mindview.utilstatic net.mindview.util.Print ,你应该扩展类打印使用它的方法.......

+0

在导入语句结束时删除打印文件仍然没有得到相同的错误,我不确定通过扩展类打印使用它的meathod是什么意思..我对Java很新。 – user1193948 2012-02-07 08:28:05

0

您应该从进口decleration删除static关键字,这样的:import static net.mindview.util.print.*;成为该:import net.mindview.util.print.*;

如果这也不起作用,我假设你是以下几点:

  • 创建自己的项目;
  • 直接从书中开始复制代码。

问题似乎是这样的:package net.mindview.util;必须与您的src文件夹中的文件夹结构相匹配。因此,如果您的src文件夹创建了一个新包并将其命名为net.mindview.util,并且您在其中放置了Print类,则应该可以使其工作。

为了将来的参考,您应该始终确保您的Java类的顶部的package删除与它所在的包匹配。

编辑: 我已经看到你的编辑,这个问题似乎有一个简单的解决方案。您声明一个名为print()的静态方法。在java中,通过使用ClassName.methodName()来访问静态方法。这:print("this dooes not work");将不起作用,因为您没有名为print的方法,该方法在Hello2类中接受字符串参数。在java中,当你编写methodName(arg1...)类型的东西时,JVM将在你正在进行调用的类以及你的调用类可能扩展的任何其他类中寻找具有该签名(方法名称+参数)的方法。

但是,正如您正确指出的那样,这将工作net.mindview.util.Print.print("this stinks");。这是因为您正在以正确的方式访问静态方法,即ClassName.methodName();

因此,在短期,解决你的问题,你需要:

  • 创建一个名为print方法,它需要一个字符串参数在Hello2类;
  • 打电话给你的打印方法,像这样:Print.print("this stinks");

这两种解决方案都应该为你工作。

+0

谢谢,但它仍然没有工作..我改变它,如你所说,并从导入中删除静态,它仍然说导入网络无法解决。 – user1193948 2012-02-07 08:11:28

+0

谢谢,但它仍然没有工作..我改变它,如你所说,并从导入中删除静态,它仍然说导入网络无法解决。我也开始了一个新项目,并在src文件下添加了新的软件包,但这也不起作用。然后我创建了一个新的源文件夹,并将一个新的包以net.mmindview.util作为名称并且不起作用。我也尝试在包浏览和项目浏览器中创建文件夹和包,两者都无法正常工作。 – user1193948 2012-02-07 08:24:23

+0

@ user1193948:你有没有例外?由于你仍然面临同样的问题(看起来),你可以更新你的问题。 – npinti 2012-02-07 08:39:58

3

我有类似的问题。我通过以下步骤解决它:

  1. 单击文件 - >新建 - > Java项目。为ProjectName填充UtilBuild。选择了选项“使用项目文件夹为根,然后单击‘完成’。
  2. 上UtilBuild在PackageExplorer窗口中右键单击,然后单击新建 - >包。包的名称,填写net.mindview.util
  3. 导航在TIJ-> net \ mindview \ util下解压缩Thinking in Java(TIJ)文件夹,在这里您可以找到util的所有源代码(.java)文件
  4. 选择net \ mindview \ util中的所有文件然后将它们拖到Eclipse的UtilBuild下的net.mindview.util包中,选择'Copy Files'选项并点击'OK'
  5. 你可能已经选择了'Build Automatically'选项。然后点击“自动生成”,这会创建.c来自.java源文件的lass文件。
  6. 在Eclipse中,右键单击您正在处理的项目(无法使blasted print()方法工作的项目!)单击Properties和Java Build Path-> Libraries。单击“添加类文件夹...”复选框UtilBuild(.class文件的默认位置)。

我觉得这里的混乱是由于CLASSPATH引起的。如果您使用Eclipse来构建并运行您的代码,那么Eclipse将管理您的CLASSPATH。 (您不必在计算机属性的“环境变量”部分中手动编辑CLASSPATH,但就Eclipse Build和Run而言,这不会改变任何内容。)

为了调用外部存在的代码您目前的项目(为方便起见,我将这个'外部代码'命名),您需要满足以下三件事: A.您需要为该代码(如.class文件或JAR内部)提供.class文件 B您需要在您的源代码中指明在哪里寻找作为'外部代码' C.您需要指明在哪里开始寻找'外部代码'

为了满足这些要求,在这个例子中我们:

A.构建项目UtilBuild,它创建我们需要的.class文件。 B.添加语句import static net.mindview.util.Print。*;在我们的代码中

C.在Eclipse中添加类文件夹库(Java Build Path-> Libraries)。

您可以通过检查步骤C调查步骤C的效果。直接存在于你的项目文件夹中的类路径文件。如果您在记事本中打开它,你将看到类似下面的一行:

<classpathentry kind="lib" path="/UtilBuild> 

你应该和你的import语句明白的地方,编译器会寻找.class文件结合这一点。合并path =“/ UtilBuild”和导入静态net.mindview.util.Print。*;告诉我们,编译器会在类文件:

UtilBuild/net/mindview/util 

而且将采取一切我们从Print.java文件生成的类(打印*)。

注:

没有与语句中的关键字静态没有问题

import static net.mindview.util.Print.*; 

静态这里只是意味着你不必给指定从打印类名.java,只是你想调用的方法。如果我们忽略的关键字从import语句静态的,那么我们就需要有资格与类print()方法属于:

import net.mindview.util.Print.*; 
//... 
    Print.print("Hello"); 

这是稍微比与静态导入取得更详细。

意见:

我觉得最对Java的人至少在最初阶段将使用Eclipse。 Thinking in Java书似乎认为你会通过命令行来做事情(因此它是编辑环境变量以便更新CLASSPATH的指导)。这与本书早期使用util文件夹代码相结合,我认为这是新语言学习者混淆的来源。我很想看到组织到Eclipse项目中的所有源代码并可供下载。除此之外,将'class文件包含在'net/mindview/util'文件夹中将会是一个不错的接触,因此事情会变得更简单。

相关问题