- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这似乎是一个简单的问题,但不知何故我在使用这段代码时遇到了问题。几年后我又回到了 Java,并且正在制作 2D 游戏。其中,我有一个名为 SnakeGame
的主驱动程序类。加载类 GameBoard
的新实例.
贪吃蛇游戏.java
package snake2;
import javax.swing.JFrame;
public class SnakeGame extends JFrame {
public SnakeGame() {
add(new GameBoard());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(320, 340);
setLocationRelativeTo(null);
setTitle("Snake Game");
setResizable(false);
setVisible(true);
}
public static void main(String[] args) {
new SnakeGame();
}
}
同一目录中有 GameBoard.java,它有一个没有必需参数的构造函数:
public GameBoard() {
[... more code ...]
}
两者GameBoard.java
和SnakeGame.java
有package snake2;
在他们文件的第一行。
但是,我不断收到以下错误:
SnakeGame.java:7: cannot find symbol
symbol : class GameBoard
location: class snake2.SnakeGame
add(new GameBoard());
^
1 error
我尝试使用 java -cp . GameBoard
将其添加到我的类路径中之后javac
。这是终端看起来可怕且不必要的冗长响应的第一行:
Exception in thread "main" java.lang.NoClassDefFoundError: GameBoard (wrong name: snake2/GameBoard)
这就好像我拼错了类,或者拼错了文件名。尽管据我所知,我也没有这样做过。我的代码是否还有其他我没有注意到的问题?
感谢您提前提供的任何帮助。
最佳答案
除了在同一目录中之外,GameBoard.java 中是否有 package
语句?
编辑运行程序--
@Stephen: I'm running java, and all the files are in the same directory.
来自@kbolino
You must put your source files in a snake2 directory and run javac from the parent directory [...]
您还必须使用正确的包和类路径调用 java,而不仅仅是 javac。
创建 SnakeGame 和 GameBoard stub 后对我有用的示例:
当前目录是 projects
,它是 snake2
目录的父目录,其中的文件如下:java Snake2.SnakeGame
当前目录是 snake2
我正在其中编辑文件:java -cp ..snake2.SnakeGame
对于情况#2,由于您位于包目录中,因此必须将父目录放入类路径中。
.
添加了大量的信息,显示我使用 javac
编译命令和 java
运行进行的 session 。您不需要像某些人建议的那样使用 -cp
进行编译。
[~/tests/java/snake2]$ pwd
/home/stephenp/tests/java/snake2
[~/tests/java/snake2]$ cat GameBoard.java
package snake2;
class GameBoard {
private static int instanceCount = 0;
GameBoard() {
GameBoard.instanceCount++;
}
void howMany() {
System.out.println(instanceCount + " GameBoards have been created.");
}
}
[~/tests/java/snake2]$ cat SnakeGame.java
package snake2;
public class SnakeGame {
private GameBoard board = null;
public SnakeGame() {
this.board = new GameBoard();
}
void report(String msg) {
System.out.println(msg);
}
public static void main(String[] args) {
SnakeGame game = new SnakeGame();
game.report("I exist");
game.board.howMany();
}
}
[~/tests/java/snake2]$ ls -1
GameBoard.java
SnakeGame.java
[~/tests/java/snake2]$ javac *.java
[~/tests/java/snake2]$ ls -1
GameBoard.class
GameBoard.java
SnakeGame.class
SnakeGame.java
[~/tests/java/snake2]$ java SnakeGame
Exception in thread "main" java.lang.NoClassDefFoundError: SnakeGame (wrong name: snake2/SnakeGame)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$000(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
[~/tests/java/snake2]$ java snake2.SnakeGame
Exception in thread "main" java.lang.NoClassDefFoundError: snake2/SnakeGame
Caused by: java.lang.ClassNotFoundException: snake2.SnakeGame
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
[~/tests/java/snake2]$ java -cp .. snake2.SnakeGame
I exist
1 GameBoards have been created.
包装
将您的应用程序与指定要运行的主类的 list 一起打包在 .jar
文件中,然后您只需使用即可运行您的程序
java -jar myprogram.jar
为此,请在包目录上方的目录中创建一个文件 Manifest.txt
[~/tests/java/snake2]$ cd ..
[~/tests/java]$ ls -1F
Manifest.txt
snake2/
[~/tests/java]$ cat Manifest.txt
Main-Class: snake2.SnakeGame
[~/tests/java]$ jar cfm myprogram.jar Manifest.txt snake2/*.class
[~/tests/java]$ jar tf myprogram.jar
META-INF/
META-INF/MANIFEST.MF
snake2/GameBoard.class
snake2/SnakeGame.class
您还可以围绕它包装一个脚本(shell 脚本、批处理文件等),这样您只需运行 myprogram
,它就会运行 java -jar myprogram.jar
这将成为您构建过程的一部分。
关于Java 不会自动包含类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031360/
我有一个类似于以下的结构。 class A { string title; List bItem; } class B { int pric
本地流 和 远程流 两者都是“媒体流列表 ”。 本地流 包含“本地媒体流 ” 对象 但是,远程流 包含“媒体流 ” 对象 为什么差别这么大? 当我使用“本地流 “- 这个对我有用: localVide
我正在尝试将 8 列虚拟变量转换为 8 级排名的一列。 我试图用这个公式来做到这一点: =IF(OR(A1="1");"1";IF(OR(B1="1");"2";IF(OR(C1="1");"3";I
我正在使用面向对象编程在 Python 中创建一个有点复杂的棋盘游戏的实现。 我的问题是,许多这些对象应该能够与其他对象交互,即使它们不包含在其中。 例如Game是一个对象,其中包含PointTrac
有没有办法获取与 contains 语句匹配的最深元素? 基本上,如果我有嵌套的 div,我想要最后一个元素而不是父元素: Needle $("div:contains('Needle')")
出于某种原因,我无法在 Google 上找到答案!但是使用 SQL contains 函数我怎么能告诉它从字符串的开头开始,即我正在寻找等同于的全文 喜欢 'some_term%'。 我知道我可以使用
我正在尝试创建一个正则表达式来匹配具有 3 个或更多元音的字符串。 我试过这个: [aeiou]{3,} 但它仅在元音按顺序排列时才有效。有什么建议吗? 例如: 塞缪尔 -> 有效 琼 -> 无效 S
嘿所以我遇到了这样的情况,我从数据库中拉回一个客户,并通过包含的方式包含所有案例研究 return (from c in db.Clients.Include("CaseStudies")
如果关键字是子字符串,我无法弄清楚为什么这个函数不返回结果。 const string = 'cake'; const substring = 'cak'; console.log(string.in
我正在尝试将包含特定文本字符串的任何元素更改为红色。在我的示例中,我可以将子元素变为蓝色,但是我编写“替换我”行的方式有些不正确;红色不会发生变化。我注意到“contains”方法通常写为 :cont
我想问一下我是否可以要求/包含一个语法错误的文件,如果不能,则require/include返回一个值,这样我就知道所需/包含的文件存在语法错误并且不能被要求/包含? file.php语法错误 inc
我想为所有包含youtube链接的链接添加一个rel。 这就是我正在使用的东西-但它没有用。有任何想法吗? $('a [href:contains(“youtube.com”)]')。attr('re
我正在尝试在 Elasticsearch 中查询。除搜索中出现“/”外,此功能均正常运行。查询如下所示 GET styling_rules/product_line_filters/_search {
我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线图书。 电子书具有自己的标题,作者等。因此,现在我正在尝试实现搜索机制。我必须使用Elasticsearch作
我已阅读Firebase Documentation并且不明白什么是 .contains()。 以下是文档中 Firebase 数据库的示例规则: { "rules": { "rooms"
我的问题是我可以给出条件[ 'BookTitleMaster.id' => $xtitid, ] 如下所示 $bbookinfs = $this->BookStockin->BookIssue->fi
我需要能够使用 | 检查模式在他们中。例如,对于像“dtest|test”这样的字符串,像 d*|*t 这样的表达式应该返回 true。 我不是正则表达式英雄,所以我只是尝试了一些事情,例如: Reg
我想创建一个正则表达式来不匹配某些单词... 我的字符:var test = "é123rr;and;ià456;or;456543" 我的正则表达式:test.match(\((?!and)(?!o
我在 XSLT 中有一个名为 variable_name 的变量,如果相关产品具有名称为 A 或 B 或两者均为 A & 的属性,我将尝试将其设置为 1 B.
您好,我想让接待员和经理能够查看工作类型和费率并随后进行更新。但是技术人员只能查看不能更新。该图是否有效? 我读到扩展用例是由发起基本用例的参与者发起的。我应该如何区分技术人员只能启动基本案例而不能启
我是一名优秀的程序员,十分优秀!