Textmate 破坏了我的 Java?线程“main”中的异常java.lang.NoClassDefFoundError

发布于 2024-08-20 07:33:12 字数 364 浏览 6 评论 0原文

我在 OS X 上使用 TextMate 运行过一次 Java 程序,但我无法再在其他任何地方使用 Java。
在最简单的程序中,我得到:

线程“main”中出现异常 java.lang.NoClassDefFoundError: 网关(名称错误: org/mcgill/电信/网关)

我是否使用 javac -classpath 。 Gateway.java、java -classpath 。 Gateway 或 Eclipse 或 Netbeans。

完全相同的程序仍然可以使用 cmd-R 在 TextMate 中运行,但不能在其他地方运行。
我的 Java 发生了什么?

I ran a Java program using TextMate on OS X once and I can't use Java anywhere else anymore.
On the simplest program, I get:

Exception in thread "main"
java.lang.NoClassDefFoundError:
Gateway (wrong name:
org/mcgill/telecom/Gateway)

Whether I use javac -classpath . Gateway.java, java -classpath . Gateway or Eclipse or Netbeans.

The exact same program can still run in TextMate using cmd-R, but nowhere else.
What happened to my Java?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷︶言冷语的世界 2024-08-27 07:33:12

我非常怀疑文本编辑器是否做到了这一点。

无论如何,java -classpath 。如果该类位于 org.mcgill.telecom 包中(文件夹结构表明),则 Gateway 将无法工作。

尝试 java -classpath 。 org.mcgill.telecom.Gateway 而不是可以看到 org 文件夹的文件夹。

您可以执行以下操作来测试它。

  • 转到 temp 文件夹并创建此文件夹结构:org/mcgill/telecom
  • telecom 文件夹中创建一个名为 Gateway.java 的文件;
  • 将以下内容复制到您的 Gateway.java 文件中;
  • 打开命令提示符并导航到您的 temp 文件夹;
  • 执行 javac org/mcgill/telecom/Gateway.java
  • 执行 java -classpath 。 org.mcgill.telecom.Gateway

这是我得到的:

bart@hades:~$ cd Temp/
bart@hades:~/Temp$ ls
org
bart@hades:~/Temp$ javac org/mcgill/telecom/Gateway.java 
bart@hades:~/Temp$ java -classpath . org.mcgill.telecom.Gateway
Oi, it works!
bart@hades:~/Temp$ 

这里是网关类:

package org.mcgill.telecom;

public class Gateway {
  public static void main(String[] args) {
    System.out.println("Oi, it works!");
  }
}

I highly doubt that a text editor did that.

Anyway, java -classpath . Gateway wouldn't work if that class is in the package org.mcgill.telecom (which the folder structure suggests).

Try java -classpath . org.mcgill.telecom.Gateway instead from the folder where the org folder can be seen.

Here's what you can do to test it.

  • go to a temp folder and create this folder structure: org/mcgill/telecom;
  • create a file called Gateway.java in the telecom folder;
  • copy the contents below in your Gateway.java file;
  • open a command prompt and navigate to your temp folder;
  • execute javac org/mcgill/telecom/Gateway.java
  • execute java -classpath . org.mcgill.telecom.Gateway

This is what I get:

bart@hades:~$ cd Temp/
bart@hades:~/Temp$ ls
org
bart@hades:~/Temp$ javac org/mcgill/telecom/Gateway.java 
bart@hades:~/Temp$ java -classpath . org.mcgill.telecom.Gateway
Oi, it works!
bart@hades:~/Temp$ 

Here the Gateway class:

package org.mcgill.telecom;

public class Gateway {
  public static void main(String[] args) {
    System.out.println("Oi, it works!");
  }
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文