NullPointer + Jars

Gregory R. Warnes warnes@biostat.washington.edu
Thu May 18 18:10:00 GMT 2000


The example program "HelloDate.java" is attached, as is the getopt jar
file.
1) My code uses the gnu getopt code for java. When the jar file is in the
classpath, the program throws a NullPointerException on startup (see
below). When the un-jar-ed data is on the classpath, everything runs
correctly. 
2) No matter how the classpath is set, I always get this error when I run
under gdb. Any ideas?
-Greg
------------Build Configuration
gcc 2.95.2 with Bryce's patches
latest CVS sources (with my java.lang.Vector, java.lang.Double,
and __build_expect patches, which shouldn't make any difference )
gcc configuration:
../gcc-2.95.2/configure --prefix=/usr --disable-threads
libgcj configuration: 
../libgcj/configure --prefix=/usr --disable-threads --norecursion 
------------Makefile
CLASSPATH=${HOME}/java/
FILES= ${HOME}/java/gnu/getopt/Getopt.class \
 ${HOME}/java/gnu/getopt/LongOpt.class \
 HelloDate.class \
compile:
 gcj -o HelloDate --main=HelloDate ${FILES}
run:
 ./HelloDate -h
------------HelloDate.java
import java.util.Date;
import gnu.getopt.Getopt;
import gnu.getopt.LongOpt;
public class HelloDate
{
 public static void main( String[] argv )
 {
 int c;
 LongOpt[] longopts = new LongOpt[1];
 String optString = "";
 
 longopts[0] = new LongOpt("help", LongOpt.NO_ARGUMENT, null,
'h'); optS
tring += "h";
 // 
 Getopt g = new Getopt("Simulate", argv, optString, longopts);
 //
 while ((c = g.getopt()) != -1)
 switch (c)
 {
 case 'h':
 System.err.println("You asked for help. We have
none.");
 break;
 } 
 
 Date date = new Date();
 System.err.println( "Hello World, Today is " + date );
 
 }
 
}
------------Transcript 
### classpath includes jar ###
hydra:/tmp/gcj> export CLASSPATH=/home/warnes/java/java-getopt-1.0.7.jar 
hydra:/tmp/gcj> ./HelloDate 
java.lang.NullPointerException
 at 0x400ae886: _init (/usr/lib/libgcj.so.1)
 at 0x400f6d4c: java::lang::String::length(void) (/usr/lib/libgcj.so.1)
 at
0x40149489: java::util::zip::ZipFile::getInputStream(java::util::zip::ZipEntry
*) (/usr/lib/libgcj.so.1)
 at
0x40116e1f: java::net::URLClassLoader::getResourceAsStream(java::lang::String
*) (/usr/lib/libgcj.so.1)
 at
0x400ef749: java::lang::ClassLoader::getSystemResourceAsStream(java::lang::String
*) (/usr/lib/libgcj.so.1)
 at
0x4013f46f: java::util::ResourceBundle::trySomeGetBundle(java::lang::String
*, java::lang::String *) (/usr/lib/libgcj.so.1)
 at
0x4013f924: java::util::ResourceBundle::partialGetBundle(java::lang::String
*, java::util::Locale *, bool) (/usr/lib/libgcj.so.1)
 at 0x4013fae3: java::util::ResourceBundle::getBundle(java::lang::String
*, java::util::Locale *) (/usr/lib/libgcj.so.1)
 at 0x0804eb3b: gnu::getopt::LongOpt::LongOpt(java::lang::String *, int,
java::lang::StringBuffer *,
int) (/home/warnes/java/gnu/getopt/LongOpt.class:0)
 at 0x0804edc7: HelloDate::main(JArray<java::lang::String *>
*) (/tmp/gcj/HelloDate.class:0)
 at
0x4014deb5: gnu::gcj::runtime::FirstThread::run(void) (/usr/lib/libgcj.so.1)
 at 0x40158a1b: java::lang::Thread::run_(java::lang::Object
*) (/usr/lib/libgcj.so.1)
 at 0x40168e6e: _Jv_ThreadStart(java::lang::Thread *, int *, void
(*)(java::lang::Thread *)) (/usr/lib/libgcj.so.1)
 at 0x40158b50: java::lang::Thread::start(void) (/usr/lib/libgcj.so.1)
 at 0x400afd8c: JvRunMain (/usr/lib/libgcj.so.1)
 at 0x0804f091: main (/tmp/ccopDtocmain.i:0)
 at 0x4028ba42: __libc_start_main (/lib/libc.so.6)
 at 0x08049b11: _start (??:0)
### classpath includes "raw" class files ###
hydra:/tmp/gcj> export CLASSPATH=/home/warnes/java # contains gnu/getopt/*
hydra:/tmp/gcj> ./HelloDate 
Hello World, Today is Fri May 19 00:53:12 GMT 2000
### run under gdb, classpath includes "raw" class files ###
hydra:/tmp/gcj> gdb ./HelloDate 
GNU gdb 19990928
Copyright 1998 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for
details.
This GDB was configured as "i686-pc-linux-gnu"...
(gdb) show env CLASSPATH
CLASSPATH = /home/warnes/java
(gdb) run
Starting program: /tmp/gcj/./HelloDate 
Program received signal SIGSEGV, Segmentation fault.
0x400f6d4a in java.lang.String.length (this=null)
 at ../../../libgcj/libjava/java/lang/String.java:131
131 return count;
Current language: auto; currently java
(gdb) backtrace
#0 0x400f6d4a in java.lang.String.length (this=null)
 at ../../../libgcj/libjava/java/lang/String.java:131
#1 0x40149489 in java.util.zip.ZipFile.getInputStream (this=@80ceea0, 
 ze=@80dad70) at ../../../libgcj/libjava/java/util/zip/ZipFile.java:130
#2 0x40116e1f in java.net.URLClassLoader.getResourceAsStream
(this=@806d348, 
 name=@80d7060) at
../../../libgcj/libjava/java/net/URLClassLoader.java:163
#3 0x400ef749 in java.lang.ClassLoader.getSystemResourceAsStream (
 name=@80d7060) at
../../../libgcj/libjava/java/lang/ClassLoader.java:335
#4 0x4013f46f in java.util.ResourceBundle.trySomeGetBundle (
 bundleName=@80d7360, stopHere=@806d3a8)
 at ../../../libgcj/libjava/java/util/ResourceBundle.java:201
#5 0x4013f924 in java.util.ResourceBundle.partialGetBundle (
 baseName=@806bf00, locale=@806d498, langStop=false)
 at ../../../libgcj/libjava/java/util/ResourceBundle.java:164
#6 0x4013fae3 in java.util.ResourceBundle.getBundle (baseName=@806bf00, 
 locale=@806d498)
 at ../../../libgcj/libjava/java/util/ResourceBundle.java:181
#7 0x804eb3b in gnu.getopt.LongOpt.LongOpt ()
#8 0x804edc7 in HelloDate.main ()
#9 0x4014deb5 in gnu::gcj::runtime::FirstThread::run (this=@806aea0)
 at ../../../libgcj/libjava/gnu/gcj/runtime/natFirstThread.cc:146
#10 0x40158a1b in java::lang::Thread::run_ (obj=@806aea0)
 at ../../../libgcj/libjava/java/lang/natThread.cc:263
#11 0x40168e6e in _Jv_ThreadStart (thread=@806aea0, 
 meth=0x40158850 <java::lang::Thread::run_(java::lang::Object *)>)
 at ../../../libgcj/libjava/no-threads.cc:28
#12 0x40158b50 in java::lang::Thread::start (this=@806aea0)
 at ../../../libgcj/libjava/java/lang/natThread.cc:294
#13 0x400afd8c in JvRunMain (klass=@8050dc0, argc=1, argv=@bffff6d4)
 at ../../../libgcj/libjava/prims.cc:867
#14 0x804f091 in main (argc=1, argv=@bffff6d4)


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /