我的教授要求我们创建一个能够在命令提示符下运行的Java程序,但也可以使用NetBeans打开它。
该程序是关于使用不同类型的排序(特别是选择,插入,交换,快速和堆排序)。我们的教授特别告诉我们在Java中使用面向对象的编程,并且她希望看到一个主类加上可以进行排序的不同类。
我尝试在NetBeans中编写程序 - 以为稍后我可以使用javac在cmd中运行该程序。
在cmd中,我输入了保存NetBeans项目的路径,并尝试使用javac编译文件。但它说''javac'不被识别为内部或外部命令,可操作程序或批处理文件。“
所以我尝试将文件保存在sun> sdk> jdk> bin中,然后从那里我尝试编译文件,这很好。当我试图运行它们时,问题出现了。
以下是我尝试编译文件的方法:
javac Main.java
Sortchoice.java
Selection.java
SelectionSort.java
Insertion.java
InsertionSort.java
Exchange.java
ExchangeSort.java
(我还没有完成接下来两次排序的语法。)
以下是我尝试在cmd中运行文件的方法:
java Main Sortchoice Selection SelectionSort Insertion InsertionSort Exchange ExchangeSort
和cmd说:
exception in thread "main" java.lang.NoClassDefFoundError: main (wring name: myjava/Main)
at java.lang.ClassLoader.defineClass1(Nativ... Method)"
at java.lang.ClassLoader.defineClass(ClassL...
at java.security.SecureClassLoader.defineCl...
at java.net.URLClassLoader.defineClass(URLC...
at java.net.URLClassLoader.access$000(URLCl...
at java.net.URLClassLoader$1.run(URLClassLo...
at java.security.AccessController.doPrivile... Method)
at java.net.URLClassLoader.findClass(URLCla...
at java.lang.ClassLoader.loadClass(ClassLoa...
at sun.misc.Launcher&AppClassLoader.loadCla...
at java.lang.ClasLoader.loadClass(ClassLoad...
at java.lang.ClassLoader.loadClassInternal(...
我该怎么办? (对不起我的千分百解释。我只是想尽可能多地提供详细信息。)
我还想强调一点,我只是Java编程的初学者。
答案 0 :(得分:22)
如果在NetBeans中单击构建,它应该(在编译器输出中)给出一条消息,例如“要从没有Ant的命令行运行此应用程序,请尝试: java -jar yourPathToRun“
答案 1 :(得分:13)
最好的方法是:
1)在其中创建一个包含src\
和tests\
的目录(如果您不使用JUnit,则测试是可选的)。
2)假设你的文件顶部有package myjava;
(并确保这是你教授想要的东西,如果他们不在正确的地方就标记出来会很痛苦),做一个src\myjava
目录(如果您正在使用JUnit tests\myjava
目录)。
3)将您的文件复制到src\myjava
目录
4)删除您的NetBeans项目并将其重新创建为新的源代码。在设置src
(和可选的test
)目录时,添加src\
(以及可选的tests\
)目录。请勿添加src\myjava
目录,否则它将无法在NetBeans中使用。
5)创建一个名为classes\
的目录(这样你就可以src\
,classes\
,也许\tests
在同一个地方)
6)在命令行类型javac -d classes -cp classes src/myjava/*.java
-d
告诉编译器将.class文件放在哪里-cp
告诉编译器在哪里查找classfiles src/myjava/*.java
告诉它编译src/myjava
7)通过java -cp classes myjava.Main
-cp
类告诉它在classes目录中查找.class文件myjava.Main
是要运行的类的名称答案 2 :(得分:6)
要运行,您只需要
java Main
而不是将每个类放在命令行上。
您是否在.java文件中声明了一个包?像,
打包myjava;
?如果是,则命令字符串必须为
java myjava.Main
这会回答你的问题吗?
答案 3 :(得分:1)
右键单击我的电脑>属性>高级>环境变量...将jdk中的bin目录添加到Path变量 例: 变量名称:路径 变量值:C:\ Program Files \ Java \ jdk1.6.0_16 \ bin
java和javac现在应该可以在命令提示符的任何目录中使用
答案 4 :(得分:0)
按照以下步骤操作(代码示例只是示例,您需要调整一些以进行设置):
将JAVA_HOME设置为安装JDK的目录。
设置JAVA_HOME =“c:\ Program Files \ Java \ jre1.6.0_12”
设置PATH以在JAVA_HOME中包含bin
目录。
设置PATH =%PATH%:%JAVA_HOME%\ bin
切换到源代码的根目录。如果您已将代码声明为包,则这是包结构的根目录。如果没有,这是包含.java文件的目录:
cd c:\ My \ Source \ Directory
以Java文件作为参数执行javac:
javac Class1.java Class2.java
(假设所有内容都正确编译)使用包含main方法的类的名称作为参数执行java
(如果包含包声明,那么您的类名是完全限定的,这意味着它应该在类名之前包含包名,并使用“。”将包名与类名分开:
java Main
答案 5 :(得分:0)
在某处创建一个文件夹,比如C:\myjava
。将您的.java
源文件从netbeans保存到C:\java
的位置复制到您的.java
。打开刚刚粘贴的这些package myjava
文件中的每一个,并删除指明包裹的行,例如javac
。使用javac c:\myjava\MyJava.java
进行编译,例如c:\myjava\MyJava
。然后像在java CREATE TABLE #TEST
(
ID INT IDENTITY(1,1) NOT NULL,
Cnt INT NOT NULL,
DescTableName VARCHAR(100) NULL
)
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'citycount' AS DescTableName FROM dbo.[Subscriptions]
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'countrycount' AS DescTableName FROM dbo.ReportSchedule
INSERT INTO #TEST (Cnt, DescTableName)
SELECT COUNT(*) AS Cnt, 'address' AS DescTableName FROM msdb.dbo.sysjobs
SELECT * FROM #TEST
DROP TABLE #TEST
答案 6 :(得分:0)
最简单的方法是在项目主文件夹下的.jar
文件夹中运行dist
文件。确保计算机bin
,System
中jdk Environmental Variables
文件夹的路径设置为常规:jar.exe
,java.exe
,{{1}等等,(如果您需要有关此操作的说明,请参阅此主题中的其他帖子。)
1)在Netbeans中进行干净的构建,按javac.exe
或点击F11
菜单,然后点击Run
。单击以通过所有提示,您需要一个干净的构建来执行此操作。
2)在命令提示符中导航到项目的Build Project
文件夹
3)在命令行输入并运行:dist
不创建单独的文件夹,不复制文件,也不要在命令行参数中包含多个文件。但是,每次更改代码之前,必须重新构建项目,然后才能在命令行上运行它。
答案 7 :(得分:0)
您的项目中将有一个 build 目录。导航到它。接下来打开课程文件夹。
现在在这里打开终端并运行java x/y
其中其中x是您的主类所在的包的名称,y是该java文件的名称
答案 8 :(得分:-1)
注释掉 class.java 文件中的 package 行。