当前位置:编程学习 > JAVA >>

java.lang.NoSuchMethodError: main Exception in thread "main"


public class Test {

/**
 * @param args
 */
public static void main(String[] args) {
Date date = new Date();
String dates = String.format(null, "%tF", date);
System.out.println(dates);
}

}

这是程序。我也从网上查了好久。都说是没有main方法。
还是没解决 。请教大虾了。。
什么原因?怎么改? --------------------编程问答-------------------- 把参数 null 换成Locale.getDefault()就可以了、不知道能不能满足你的要求、、、 --------------------编程问答-------------------- 重新编译这个类就可以了。应该是刚才写的文件,没有重新编译,你java时是运行以前的java class文件。 --------------------编程问答--------------------
引用楼主 tangyongjundeqian 的回复:
Java code

public class Test {

    /**
     * @param args
     */
    public static void main(String[] args) {

  LZ再查一下CLASSPATH的这个环境变量,如果开头没有 .; 这两个符就加上它,这是让java首先在当前目录搜索.class文件,然后才搜索后面的路径。 --------------------编程问答-------------------- 加上那个也不行。(直接报错)
重新编译;如何重新编译?
用eclipse工具。如何重新编译。
是吧class文件夹里的class文件删了。然后报错吗??
不行。该试的都试了。 百度google了一上午了。。没用的。
--------------------编程问答--------------------
引用 3 楼 gsy999 的回复:
 LZ再查一下CLASSPATH的这个环境变量,如果开头没有 .; 这两个符就加上它,这是让java首先在当前目录搜索.class文……

这种做法我也想过。。
但是如果执行其他的一个程序就没问题呀。。
控制台输出一句话 就没事。
--------------------编程问答-------------------- 我特怀疑。是版本的问题吗??但是也查看了是1.6的呀。。
用的jdk也不是eclipse自带的。是自己下载的呀。
哎。。 --------------------编程问答--------------------
引用 4 楼 tangyongjundeqian 的回复:
加上那个也不行。(直接报错)
重新编译;如何重新编译?
用eclipse工具。如何重新编译。
是吧class文件夹里的class文件删了。然后报错吗??
不行。该试的都试了。 百度google了一上午了。。没用的。


//LZ 你在搞笑,你的程序根本就没编译就拿出来说没main方法。
//按下面的程序,粘贴到你的编辑器中,保存后重新编译。
import java.util.*;
public class Test {
    /**
     * @param args
     */
    public static void main(String[] args) {
        Date date = new Date();
        String dates = String.format("%tF", date);
        System.out.println(dates);
    }
}
--------------------编程问答-------------------- format有两种参数的重载

public static String format(Locale l, String format, Object ... args) {
        return new Formatter(l).format(format, args).toString();
    }
public static String format(String format, Object ... args) {
        return new Formatter().format(format, args).toString();
    }

因为后面跟着的是可变数组  对于null可以理解为时Locle 也可以认为是字符串 
编译器应该不会知道调用那个方法 --------------------编程问答-------------------- 首先楼主的源程序是没法编译通过的,错误提示为对format的引用不明确。解决办法为将format方法的第一个参数设置明确的值,可以改为Locale.getDefault()或其他值,运行正确,输出日期
楼主再试一下 --------------------编程问答-------------------- 你这个编译就通不过,先试试这个:

    public static void main(String[] args) {
        Date date = new Date();
        String dates = String.format("%tF", date);
        System.out.println(dates);
    }


如果还不行 那是你环境的问题了 --------------------编程问答-------------------- 我真无语了
我真想把图片粘贴出来看看。
如果加了Local jvm所处的环境。就报错;
如果设为null就没事。

还有朋友说这个程序没有编译。
怎么肯能呢。用了这么长时间的java了
没有编译我就运行。我不是很二吗?

我还是感觉环境的问题。。
--------------------编程问答-------------------- 哪位大侠 给试试这段程序。到底是啥原因。。
程序也不是很多。放在你们的环境里面运行一下看看
不胜感激
谢谢了。 --------------------编程问答--------------------
引用 12 楼 tangyongjundeqian 的回复:
哪位大侠 给试试这段程序。到底是啥原因。。
程序也不是很多。放在你们的环境里面运行一下看看
不胜感激
谢谢了。

我就是试过了才把程序给你的,下面是控制窗口的信息(一开始是没修改的情况)

符号: 类 Date
位置: 类 Test3
        Date date = new java.util.Date();
        ^
1 错误

I:\java>javac Test3.java
Test3.java:10: 对 format 的引用不明确,java.lang.String 中的 方法 format(java.la
ng.String,java.lang.Object...) 和 java.lang.String 中的 方法 format(java.util.Lo
cale,java.lang.String,java.lang.Object...) 都匹配
        String dates = String.format(null, "%tF", date);
                             ^
1 错误

I:\java>javac Test3.java

I:\java>java Test3
2011-08-20

I:\java>javac Test3.java

I:\java>java Test3
2011-08-20

I:\java>
--------------------编程问答--------------------
import java.util.Date;
import java.util.Locale;

public class thread {
public static void main(String[] args) {
Date date = new Date();
String dates = String.format(Locale.getDefault(), "%tF", date);
System.out.println(dates);

}
}

为null编译不过 jdk1.6 --------------------编程问答--------------------
引用 14 楼 cbxjj 的回复:
Java code
import java.util.Date;
import java.util.Locale;

public class thread {
    public static void main(String[] args) {
        Date date = new Date();
        String dates = String.forma……

--------------------编程问答--------------------
import java.util.Date;
import java.util.Locale;

public class test{
public static void main(String[] args) {
Date date = new Date();
Locale l = null;
String dates = "";
try {
dates = String.format(l, "%tF", date);
} catch (Exception e) {
// e.printStackTrace();
dates = String.format("%tF", date);
}
System.out.println(dates);
}
}

l为null会为空format
 看下api
public static String format(String format,
                            Object... args)使用指定的格式字符串和参数返回一个格式化字符串。 
始终使用的语言环境是由 Locale.getDefault() 返回的语言环境。 


参数:
format - 格式字符串
args - 在格式字符串中由格式说明符引用的参数。如果还有格式说明符以外的参数,则忽略这些额外的参数。参数是可变的并且可以为 0。参数的最大数目受《Java Virtual Machine Specification》所定义的 Java 数组的最大维度的限制。针对 null 参数的行为依赖于 转换。 
返回:
一个格式化字符串 
抛出: 
IllegalFormatException - 如果格式字符串中包含非法语法,与给定的参数不兼容的格式说明符,格式字符串给定的参数不够,或存在其他非法条件。有关所有可能的格式化错误的规范,请参阅 formatter 类规范的 Details 一节。 
NullPointerException - 如果 format 为 null
从以下版本开始: 
1.5 
另请参见:
Formatter
指针

可以看到
String dates = String.format(Locale.getDefault(), "%tF", date);
和dates = String.format("%tF", date);是一个效果
所以没必要写前面的null都可以 --------------------编程问答--------------------
引用 13 楼 gsy999 的回复:
引用 12 楼 tangyongjundeqian 的回复:
哪位大侠 给试试这段程序。到底是啥原因。。
程序也不是很多。放在你们的环境里面运行一下看看
不胜感激
谢谢了。

我就是试过了才把程序给你的,下面是控制窗口的信息(一开始是没修改的情况)

符号: 类 Date
位置: 类 Test3
  Date date = new java.util.Date();
  ^
……


你还用的javac呀。。我在工具里面呢。好吧我再试试吧
谢谢了 。
--------------------编程问答-------------------- 换成jdk5.0试试!
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,