アーカイブ

‘Java’ カテゴリーのアーカイブ

Windows で コマンドプロンプトから Java のプログラム実行時に NoClassDefFoundError が発生する問題

2009 年 10 月 17 日 libro コメントはありません



ちょっとハマッたのでメモ.

JavaでTCPサーバを書いてWindowsのコマンドプロンプトでコンパイルして実行しようとすると,

java TCPServer
Exception in thread "main" java.lang.NoClassDefFoundError: tcp/TCPServer (wrong name: tcp/TCPServer)
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(Unknown Source)
        at java.security.SecureClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.defineClass(Unknown Source)
        at java.net.URLClassLoader.access$000(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClassInternal(Unknown Source)
Could not find the main class: tcp.TCPserver.  Program will exit.

という,エラー.
コンパイルは通る,classファイルもある.
どうしたものかと思って原因を調べると,原因が判明.

どうやらJavaのクラスファイルは、packageの階層と同じディレクトリ構造にしないといけないらしく.

この例であれば、tcpserverというディレクトリを作り、
その中にコンパイルしたTCPServer.classを入れ、tcpserverの上位ディレクトリから

java tcpserver.TCPServer
もしくは
java tcpserver/TCPServer

で起動できるらしい.

Java未だによく分かってない.
勉強せねば...

参考リンク
実行時のNoClassDefFoundErrorが解決できません (http://oshiete1.goo.ne.jp/qa3105812.html)

カテゴリー: Java タグ:

EclipseでGoogle APIプログラミング~環境の構築

2009 年 6 月 13 日 libro コメントはありません

EclipseでGoogleのAPIをいじるプログラムを書こうと思い、Coding in the Shade: Using Eclipse with Google Data APIsを見ながら設定していたのだが、いつまでもサンプルプログラムが動かず苦労したので、ここに導入方法をまとめておく。

Eclipse導入・目次

1. Eclipseのダウンロード
2. GData Java Client Libraryのダウンロード
3. その他必要なライブラリのダウンロード
4. サンプルプロジェクトの作成
5. サンプルプログラムの実行


1. Eclipseのダウンロード

まずは、公式サイトからEclipseを落とす。いろいろ種類があるが、ひとまず「for Java Developers」で大丈夫そう。DLが終わったら、起動して適当な場所にworkspaceを作成する。


2. GData Java Client Libraryのダウンロード

続いて様々な機能を提供してくれるGData Java Client Libraryをダウンロードしてくる。ここからダウンロード可能。ライブラリの中身も見たい人はsrcをダウンロードしてもいいが、APIを利用するだけであれば、samplesの方でOK。解凍したら、eclipseフォルダに入れておく。


3. その他必要なライブラリのダウンロード

そのほか必要になるファイルをダウンロードしてくる。
Filename Location
mail.jar Sun’s JavaMail API
activation.jarSun’s JavaBeans Activation Framework
servlet-api.jar Apache Tomcat
これらのファイルは、eclipse/gdata/third_partyに入れておく。


4. サンプルプロジェクトの作成

適当な名前のプロジェクトを新規作成し、最下部の「next」を押す。上のタブから「Libraries」を選び、「Add External JARs」から、/gdata/java/libにあるgdata-client, gdata-client-meta, gdata-core, gdata-media, data-docs, gdata-docs-metaを追加する。

次に、3で/gdata/third_partyに保存したmail.jar, servlet-api.jar, activation.jarを読み込む。

Googleのドキュメントには上のライブラリを読み込めばいいと書いてあるが、これだけでは何度やってもサンプルプログラムで “java.lang.NoClassDefFoundError“エラーが出てしまっていたが、gdata/java/depsにあるgoogle-collectjsrを読み込むことで解決した。


5. サンプルプログラムの実行

ここまで来れば、あと一息。Googleドキュメントの文書タイトルを読み込むサンプルプログラムを実行してみる。

import java.net.URL;
 
import com.google.gdata.client.docs.DocsService;
import com.google.gdata.data.docs.DocumentListEntry;
import com.google.gdata.data.docs.DocumentListFeed;
 
public class testDocumentsList {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try{
			DocsService service = new DocsService("Document List Demo");
			service.setUserCredentials("your_id@gmail.com", "your_password");
 
			URL documentListFeedUrl = new URL("http://docs.google.com/feeds/documents/private/full");
 
			DocumentListFeed feed = service.getFeed(documentListFeedUrl, DocumentListFeed.class);
 
			for(DocumentListEntry entry : feed.getEntries()) {
				System.out.println(entry.getTitle().getPlainText());
			}
		}
		catch(Exception ex){
			System.out.println("Exception: "+ ex.getMessage());
		}
	}
}


このとき、アカウント情報を追加しておくことをお忘れなく。これを実行すればコンソールにGoogleドキュメントに保存された文書のタイトルが表示されるはずである。

以上が、EclipseでJavaを使ってGoogle APIをいじるため下準備であった。


関連書籍

Google APIGoogle APIGoogle APIGoogle API

カテゴリー: Java タグ: ,

Javaのクラスを配列化する

2009 年 6 月 8 日 libro コメントはありません

Javaでクラスの配列を作った場合、newしただけでは初期化されないらしい。

class example[] = new example[10];

では、null Exception Errorが出てしまうので、

class example[] = new example[10];
for(int i=0; i<10; i++){
  example[i] = new example();

とすると大丈夫なようだ。

ところで,Javascriptならオライリーのラクダ,Perlならラクダ本などがあるが,Javaの入門書ってあまり評判のいい本の話を聞かない.僕自身も,大体は授業のプリントとAPIドキュメントで一通り学んだ気がする.気になったので,Amazonで調べてみたら,以下の本の評判がよさそうだと感じた.

Java
よくわかるJava (単行本)

カテゴリー: Java タグ: