【问题标题】:How can I compile code that uses a .jar file class with BlueJ?如何通过 BlueJ 编译使用 .jar 文件类的代码?
【发布时间】:2012-10-05 19:56:24
【问题描述】:

我正在使用 BlueJ 学习 java,最近我收到了一个名为 Imagen.jar 的 .jar 文件。显然,它的作用是根据作为参数提供的图像文件名返回一些像素向量。

无论如何,我应该编写一个程序来使用一个名为Imagen 的类。显然,此类在提到的.jar 文件中。

很明显,如果我使用这样的类,BlueJ 将不会编译,因为我没有导入它或任何东西。但是,我真的不知道如何首先导入这样的类。

我得到了以下示例代码:

import java.io.PrintWriter;

public class Main {
   public static void main(String arg[ ]){
      if(arg.length > 1){
         Imagen imagen = new Imagen(arg[0]);
         int [][] m = imagen.getMatriz();
         PrintWriter salida = null;
         try {
             salida = new PrintWriter(arg[1]);  
         }
         catch(Exception e){
            System.err.println(e);   
         }
         for(int [] fila : m ){
            for(int valor : fila){
               System.out.print("\t"+valor);
               salida.print("\t"+valor);
            }   
            salida.println("");
            System.out.println("");
         }
         if(salida!=null){
            salida.close();
         }
      }
      else {
         System.out.println("Uso: java -classpath .;Imagen.jar Main nombreArchivo.gif");  
      }
   }
}

不使用 BlueJ 编译。但是,正如您所看到的,最后它说要使用它,您必须在终端中输入:

java -classpath .;Imagen.jar Main myImageFile.gif

我做到了。但它一直给我同样的信息。

所以我现在卡住了:

  • 为什么我被告知使用的终端线路不起作用?
  • 如何导入 .jar 文件中包含的类?

【问题讨论】:

  • “但它一直给我同样的信息”。请告诉我们错误消息的内容。
  • @ReyCharles:消息是 "Uso: java -classpath .;Imagen.jar Main nombreArchivo.gif"
  • 在这种情况下,它似乎可以正常工作。您只是没有为程序提供参数(这似乎是一个 .gif 文件)。
  • 你当然是对的。我认为重要的部分是错误来自java程序而不是JVM。此外,代码有点可疑。如果new PrintWriter(arg[0]) 抛出异常(注意它是Exception, 而不是IOException 或更具体的),那么它只会打印错误并继续,直到程序最终抛出空指针异常。

标签: java bluej


【解决方案1】:

您需要执行以下操作一次。

选择菜单选项工具 -> 首选项。 在出现的对话框中,单击“库”选项卡。

单击添加按钮。 导航到包含 jar 文件的文件夹。选择jar文件。 重启 BlueJ。

Answer extracted from this place

【讨论】:

  • 完美运行。当然,如果对发生的事情和原因有更深入的解释,我们将不胜感激,但谢谢。
  • 您正在告诉 IDE 它必须在其类路径中包含的外部 jar,以便您的类可以找到它们。当您设置项目的构建配置、添加外部 jar 或将您的项目与其他项目关联时,您在 Eclipse 中执行的操作与此相同。
【解决方案2】:

您需要导入 Imagen 类,因为它在 main 方法中使用。

【讨论】:

  • 但是当我这样做时 import Imagen; BlueJ 会告诉我 " '.'预期“
  • 导入 .Imagen.您应该为 Imagen 类提供完全限定的包名称。
  • 无论该类是否在包中,他都必须导入该类,因为它不是核心包的一部分。在投反对票之前了解导入。
  • 该类在默认包中(文件开头没有package foo;的类)。默认包中的类和接口始终在范围内,因此您不需要导入它们。无论如何,您将如何在默认包中导入包?!这个答案是完全错误的。再投反对票。
  • 如果有办法编写代码并不意味着它是正确的。您是否鼓励人们不要使用软件包?这个答案是通过查看问题中的代码给出的。有多少人会编写没有包名的程序?如果我在另一个没有包的 jar 文件中有相同的类名怎么办?任何方式都感谢您投票并浪费您的时间来解释@Hot Licks 已经澄清的内容。
猜你喜欢
  • 1970-01-01
  • 2014-05-28
  • 2014-03-02
  • 1970-01-01
  • 2014-12-27
  • 1970-01-01
  • 2015-11-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多