過去に開発したWebアプリをEclipseを使用して再開発し直してみようと挑戦中ですが、以下のエラーが解決できず困っています。
*****
org.apache.jasper.JasperException: JSPのクラスをコンパイルできません
JSPファイル: null の中の行: -1でエラーが発生しました
生成されたサーブレットのエラーです:
[javac] Compiling 1 source file
E:\AddProgram\Eclipse\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Standalone\localhost\XXX\login_jsp.java:10: java.lang.Object にアクセスできません。
クラスファイル E:\AddProgram\Eclipse\eclipse\jre\lib\rt.jar(java/lang/Object.class) は不正です。
クラスファイルのバージョン 49.0 は不正です。48.0 であるべきです。
削除するか、クラスパスの正しいサブディレクトリにあるかを確認してください。
public class login_jsp extends HttpJspBase {
^
エラー 1 個
*****
Javaビルドパス-クラスパス変数は j2sdk1.4.2\jre\lib\rt.jarになっているし、
Javaコンパイラーの準拠レベルは1.4になっているし、
JAVA_HOMEやPATHもj2sdk1.4.2、j2sdk1.4.2\binになっているんですが、何故別のjarを参照してしまっているのでしょうか?

Eclipseの再起動、JRE1.4.2の再インストールなども試みましたが、解決せず悩んでいます。解決方法をご存知の方、ご教授ください。

■環境(最終的に落ち着いた使用バージョンは以下の通り。)
・EclipsePleiadesAllinOneJava3_4_2
・java 1.4.2
・Tomcat 4.1.31
・Apache 2.0.53
・MySQL 4.0.25

A 回答 (2件)

やっぱり、EclipseにJREがあるようですね。

これが原因ではないでしょうか。Eclipseは、同じフォルダ内にJREがあると、デフォルトのJREではなくそちらを使って起動しますので、それで1.4が使われずクラスライブラリのバージョン問題が発生しているのではないでしょうか。

EclipseのJREを他の場所に移動して起動したらどうでしょうか。それでダメなら、JREなしのものをいれて試してみるのがよいかと思います。
    • good
    • 1
この回答へのお礼

結局、JREをリネーム、移動しても、コンパイラーを1.5や1.6にしても(Tomcatもバージョン変更)解決せず、JREなしのEclipseをDL、インストールしました。ところが、いろいろ調べていく中で、Eclipse3.4.2はJRE1.5以上じゃないと動作しないことが判明し、最終的には、再度JRE付Eclipseを別サイトからDL、インストールし、初めからやり直しました。
最終的にはJRE1.5、Tomcat5.5で正常に過去に開発したWebアプリが動作しました。
いろいろアドバイスありがとうございました!
コーディングで悩むのは楽しいものですが、環境設定でつまずくのは中々辛いものですね・・・(^^;

お礼日時:2011/04/22 21:07

JREでver.5(1.5)のものがどこかにインストールされていませんか? コンパイル時に、このクラスライブラリを見に行っているために「クラスファイルのバージョン 49.0 は不正です」と出てくるのだと思います。

つまり、jdk 1.4から、jre 5(1.5)のクラスを利用しようとして「それは使えない」といわれているのでしょう。

どうしてもそのバージョンのJDK+Tomcatでないといけない理由があるのでしょうか。個人的には、おそらく過去に開発したものも基本的には最新のJDKで動くはずですので、JDKとTomcatを最新版にして改めて開発するほうがよいようにも思います。

どうしてもバージョンアップは出来ないということになると、どこでver.5のクラスライブラリが呼ばれることになっているのかわからないのですが、JRE 5.xがあればアンインストールして、最新が1.4台となるようにして確認してみるしかないかも知れません。

あるいは、今気が付きましたが、EclipsePleiadesAllinOneJava3_4_2がJREが付きで、これに入っているJREがver.5ってことはないですか? AllinOneパッケージは、その中に用意されているJREで動きますので、プラットフォームにどのJREがあろうが関係ないです。JREなしのものを使っているでしょうか? そのへんも確認してみてはいかがでしょうか。

この回答への補足

早速の回答ありがとうございます!
JREのバージョンにこだわっているわけではありません。(過去に開発した時には、ApacheやTomcatやMySQLなどのバージョンの組み合わせでうまく動作しないことがありましたが、JREは特に問題ないと考えています。)

現状、jreの導入状態は以下の通りで、
*****
Eclipse\eclipse\jre java version "1.6.0_13"
Eclipse\jre1.4 java version "1.4.2_19"
Eclipse\jre1.5 java version "1.5.0_18"
Eclipse\jre1.6 java version "1.6.0_13"

C:\MyPGM\j2sdk1.4.2 java version "1.4.2"
*****
コマンドプロンプトで確認すると java version "1.5.0_06" と出るので、どこかでパスが通ってるようなんですが、環境変数(システム、ユーザ)の%PATH%にも%CLASSPATH%にも通ってないし、1.5をアンインストールしようにも、スタートメニューやコントロールパネルのアプリの削除でも出てこないため、1.5のアンインストールもできません。(jre1.5のフォルダの中にもアンインストーラがない。。)
Eclipseごとアンインストールして、JREなしのEclipseを再インストールするしか方法はないのでしょうか?

補足日時:2011/04/20 21:07
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました!

お礼日時:2011/04/25 19:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qメンバ関数(メソッド)をマルチスレッドにしたい

環境はWinXPでVisual Studio 2005を使用しています。
C言語で関数をマルチスレッド化するにはこんな感じでOKでした。

// マルチスレッド関数
void Thread( void * )
{
}

void MainFunc()
{
  (HANDLE)_beginthread( Thread, 0, NULL );
}



こんな風にスレッド関数をC++のメソッドに変えてうまくいくかと思い

class Test_c {
public:
  void Thread( void * );
} ;

// マルチスレッド関数
void Test_c::Thread( void * )
{
}

void MainFunc()
{
  Test_c t t;
  (HANDLE)_beginthread( t.Thread, 0, NULL );
}

とするとエラーが出てきてしまい、コンパイルが通りませんでした。
C++のメンバ関数をマルチスレッド関数としたい場合はどの様に書けばよいのでしょうか・・?

環境はWinXPでVisual Studio 2005を使用しています。
C言語で関数をマルチスレッド化するにはこんな感じでOKでした。

// マルチスレッド関数
void Thread( void * )
{
}

void MainFunc()
{
  (HANDLE)_beginthread( Thread, 0, NULL );
}



こんな風にスレッド関数をC++のメソッドに変えてうまくいくかと思い

class Test_c {
public:
  void Thread( void * );
} ;

// マルチスレッド関数
void Test_c::Thread( void * )
{
}

void MainFunc()
{
  Test_c t t;
 ...続きを読む

Aベストアンサー

 こんにちは。

 メンバ関数からスタティックメンバ関数のアドレスとthisポインタを渡してスレッドを起動するのが手っ取り早いです。
 スレッドに飛び込んだら、其のままパラメータをTest_c*にキャストして、メンバ関数側へ迂回出来ます。
 その他、クリティカルセクション等は、外回りで必要に応じてするか、メンバ関数内でするか等、色々有るのですが・・・。
 アラも有りますが、取り敢えずは参考程度に。

#include<windows.h>
#include<mmsystem.h>
#include<process.h>
#include<stdio.h>

#pragma comment(lib, "winmm.lib")

//クリティカルセクション
class CCS
{
CRITICAL_SECTION cs;
public:
CCS(){::InitializeCriticalSection(&this->cs);}
~CCS(){::DeleteCriticalSection(&this->cs);}

CRITICAL_SECTION* get() const { return (CRITICAL_SECTION*)&this->cs; }
};
//排他クラス
class CLock
{
const CCS& rccs;
public:
CLock(const CCS& r) : rccs(r){::EnterCriticalSection(rccs.get());}
~CLock(){::LeaveCriticalSection(rccs.get());}
};
//テストクラス
class Test_c
{
enum { ThreadCount = 2 };
HANDLEarrhThread[ThreadCount];
CCSccs;
intvalue;
//マルチスレッド関数(計算)メンバ関数へ転送
static void ThreadCalc(void* p)
{
Test_c* pTest = (Test_c*)p;
pTest->calc();
}
//マルチスレッド関数(表示)メンバ関数へ転送
static void ThreadPrint(void* p)
{
Test_c* pTest = (Test_c*)p;
pTest->print();
}
//メンバ関数(計算)
void calc()
{
::printf("%s\n", "計算開始");
const DWORD dwStartTime = ::timeGetTime();
//1秒間計算する
while(::timeGetTime() - dwStartTime <= 1000)
{
CLock lock(this->ccs);
++this->value;
::Sleep(16);
}
::printf("%s\n", "計算終了");
::_endthread();
}
//メンバ関数(表示)
void print()
{
::printf("%s\n", "表示開始");
const DWORD dwStartTime = ::timeGetTime();
//1.5秒間表示する
while(::timeGetTime() - dwStartTime <= 1500)
{
CLock lock(this->ccs);
::printf("%d\n", this->value);
::Sleep(16);
}
::printf("%s\n", "表示終了");
::_endthread();
}
public:
//全てがシグナルになるまで待つ
static void Wait(Test_c& t)
{
while(1)
{
const DWORD dwResult = ::WaitForMultipleObjects(ThreadCount, t.arrhThread, TRUE, INFINITE);
if(dwResult >= WAIT_OBJECT_0 && dwResult <= WAIT_OBJECT_0 + ThreadCount - 1)
break;
}
}
Test_c() : ccs(), value(0)
{
for(int i = 0; i < ThreadCount; ++i)
arrhThread[i] = NULL;
}
void start()
{
this->arrhThread[0] = (HANDLE)::_beginthread(&Test_c::ThreadPrint, 0, this);
this->arrhThread[1] = (HANDLE)::_beginthread(&Test_c::ThreadCalc, 0, this);
}
void close()
{
for(int i = 0; i < ThreadCount; ++i)
{
::CloseHandle(arrhThread[i]);
arrhThread[i] = NULL;
}
}
};
//お試し
int main()
{
TIMECAPS tc = {0};
::timeGetDevCaps(&tc, sizeof(tc));
::timeBeginPeriod(tc.wPeriodMin);
Test_c test;
test.start();
Test_c::Wait(test);
::timeEndPeriod(tc.wPeriodMin);
return 0;
}

 こんにちは。

 メンバ関数からスタティックメンバ関数のアドレスとthisポインタを渡してスレッドを起動するのが手っ取り早いです。
 スレッドに飛び込んだら、其のままパラメータをTest_c*にキャストして、メンバ関数側へ迂回出来ます。
 その他、クリティカルセクション等は、外回りで必要に応じてするか、メンバ関数内でするか等、色々有るのですが・・・。
 アラも有りますが、取り敢えずは参考程度に。

#include<windows.h>
#include<mmsystem.h>
#include<process.h>
#include<stdio.h>

...続きを読む

QJSPコンパイルエラー 「Branch is too large, Internal restriction」のエラー

すいません、マニアックな質問をします。
「あっ!!これ知ってる!!」
って方お願いします。
JSPコンパイルエラー
「Branch is too large, Internal restriction」
のエラーを<jsp:includeを使わない方法で
回避できる方法を教えてください。

Aベストアンサー

私はAPサーバはWeblogicとTomcat(?)くらいしか
経験がないので、WebSphereについてはわからないのですが、
私はWeblogicの場合はWeblogicのjspcを使いますが、
Tomcatの場合はANTのjspcタスクでJSPコンパイルを
しています。

ですので、ANT1.5以上でJSPコンパイルしてはいかがでしょうか?

参考URL:http://www.jajakarta.org/cgi-bin/cvsweb/ant/

Qマルチスレッドについて

既存のソフトをマルチスレッド対応になるように改良してくださいと
いわれるとプログラマーの方はどう思いますか?

全てのソフトをマルチスレッド対応しても
意味はないと思いますが。

また、現時点でマルチスレッド対応すべきソフト(エンコード、ゲーム)は
対応しているのでしょうか?

Aベストアンサー

>アルゴリムが分かれば簡単ですか?
アルゴリズムがわかれば、簡単かどうか判断できます。

>意味はないかもしれませんが、ブラウザをマルチスレッド化することは
出来ると思いますが、意味はないでしょうね。

Q開発初心者です。eclipseでJSPファイルの更新結果が画面に反映さ

開発初心者です。eclipseでJSPファイルの更新結果が画面に反映されません。

eclipseを起動して初めの一回はJSPファイルが作成されたとおりに画面に表示されるのですが、コードを書き変えて実行すると更新結果が反映されず更新前と同じ画面で表示されてしまいます。

eclipseを再起動させてコードを書きかえれば更新できるようですが、やはり更新できるのはeclipseを起動させて初めの一回でそのあとはコードを書き変えて実行しても結果が固定されてしまいます。


とくにエラーも表示されないので原因がわからないのですが更新が反映されないのはどのような原因が考えられるでしょうか?

ご教授よろしくお願いします。

Aベストアンサー

案1
プロジェクトのリフレッシュ(F5)→ビルド→workフォルダの中身を全部削除→APサーバ(tomcat等)の再起動

案2
プロジェクトのクリーン→ビルド→workフォルダの中身を全部削除→APサーバ(tomcat等)の再起動

何か勝手にworkフォルダに溜まっていき、それが悪さをしてるようなので、jspファイルを変更しても画面がかわらないならworkフォルダの中身を全部消しちゃいましょう

Qマルチスレッドプログラミングについて

C言語のマルチスレッドについて学びたいと思っています。
「猫でも分かる」のマルチスレッドの項を見てみましたが、
もうちょっと色々コードのサンプルを見てみたいと思いました。
そこで他にマルチスレッドを解説しているサイトを探そうと検索してみても、
書籍情報ばかりが出てきて、なかなか解説サイトを探せませんでした。
マルチスレッドの簡潔なサンプルが載っているようなサイトがあれば教えていただけたらと思います。

Aベストアンサー

スレッド関係の関数名を元に検索してはどうでしょうか?
CreateThreadや_beginthreadなどが良いかと思います。

QEclipseでのJSP・Servlet開発について(文字化け)

EclipseでJSP、Servletの開発をしております。
文字化けについての質問なのですが、ブラウザ上で表示される文字が
文字化けしてしまいます。JSPの頭に
<%@page contentType="text/html; charset=SHIFT_JIS"%>
と入れており、ブラウザでもエンコードはShift_JISとなっています。

自分なりに原因を調べたのですが、○○.jsp→○○_jsp.javaに変換?する際に
文字化けしているようで、Eclipse上でJSP、Servletを見ると普通なのですが、
○○_jsp.javaは見事に文字化けしていました。
文字化けした○○_jsp.javaを削除して再度表示(_jsp.javaの再作成)も試みた
のですが、同じ結果でした。

1ヶ月以上触っていないパッケージのソースも突然文字化けを起こしたので
原因も分からない状態です。
原因・直し方がお分かりの方、是非ともご指南下さい。
情報不足でしたら追記させて頂きますので、どうぞ宜しくお願い致します。

Aベストアンサー

Eclipseの文字コードの設定は、これから作成するファイルに関しては
「ウィンドウ->設定->一般->ワークスペース」で
「テキスト・ファイル・エンコード」にて指定できます。
ただし、これだとすでに作成したファイルの文字コードは変更されないため、
対象ファイルを右クリックし、「プロパティ->リソース」で変更できます。

>テキストエディタで開くと文字化けしていないのに、何故かEclipseで開くと文字化けし、稀に(きっかけは不明だが)ブラウザ(FireFox)上でも文字化けした状態で表示される。

これも上記で設定すれば解決すると思います。
テキストエディタは何を使っているのかわからないですが、テキストエディタ側ではShift-jisで読み込んで、EclipseではUTF-8?で読み込んでいるために起きているのが原因だと思います。

ちなみに、JSPをインクルードする際、インクルードされるJSPに
<%@ page pageEncoding="SHIFT-JIS" %>
を指定しないと文字化けする可能性があります。(インクルードする側とされる側両方にContentTypeをしていすると、される側のContentTypeは無効化され、される側の文字コードを判断する手立てがなくなってしまうため)

Eclipseの文字コードの設定は、これから作成するファイルに関しては
「ウィンドウ->設定->一般->ワークスペース」で
「テキスト・ファイル・エンコード」にて指定できます。
ただし、これだとすでに作成したファイルの文字コードは変更されないため、
対象ファイルを右クリックし、「プロパティ->リソース」で変更できます。

>テキストエディタで開くと文字化けしていないのに、何故かEclipseで開くと文字化けし、稀に(きっかけは不明だが)ブラウザ(FireFox)上でも文字化けした状態で表示される。

これ...続きを読む

QC# マルチスレッドにおける例外処理

下記のようなデリゲートを利用したマルチスレッドのプログラムを組みました。
しかし、マルチスレッド内で例外がおきても、正常にプログラムが終了してしまいます。
(try-catchでも例外を捕捉できません)

マルチスレッドプログラムにおいて、例外を捕捉するにはどうすれば、いいのでしょうか?

using System;
using System.Threading;
class Class1
{
delegate void delg();

public static void Main()
{
delg d = new delg(multi);
d.BeginInvoke(new AsyncCallback(call), null); //マルチスレッド開始

System.Threading.Thread.Sleep(500);
//マルチスレッドで例外を強制的に投げているので、
//ここまでたどり着く前にアプリケーションが落ちるはず。
//しかし、実際には正常終了。
Console.WriteLine("メインメソッド 正常終了");
}

public static void multi()
{
Console.WriteLine("マルチスレッドで実行中");
throw new Exception();//例外を強制的に投げる。
}

public static void call(IAsyncResult ar)
{
Console.WriteLine("コールバックメソッド実行");
}
}

下記のようなデリゲートを利用したマルチスレッドのプログラムを組みました。
しかし、マルチスレッド内で例外がおきても、正常にプログラムが終了してしまいます。
(try-catchでも例外を捕捉できません)

マルチスレッドプログラムにおいて、例外を捕捉するにはどうすれば、いいのでしょうか?

using System;
using System.Threading;
class Class1
{
delegate void delg();

public static void Main()
{
delg d = new delg(multi);
d.BeginInvoke(new AsyncCallback(call), null); //マルチ...続きを読む

Aベストアンサー

>#1の方
BeginInvokeは「非同期」の実行ですので、マルチスレッドになります。

で、非同期delegateでのマルチスレッドですが、どうも特殊みたいで、BeginInvoke中での例外を別スレッドでは受けられないようで、該当スレッド中で例外を受ける必要があるようです。
http://blog.livedoor.jp/gushwell/archives/23832333.html

Threadクラス使えばこのような方法で問題無いみたいですが、当然引数、戻り値は使えませんから、例えばこんな手を使います。
http://www.atmarkit.co.jp/fdotnet/mthread/mthread02/mthread02_02.html

参考URL:http://blog.livedoor.jp/gushwell/archives/23832333.html

QEclipseでJSP→Mysql接続エラー

こんにちは。
EclipseもJavaも初心者ですが、学習本を頼りにJSPでMysqlに接続しようとしています。

<sql:setDataSource
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"  
user="root"
password="pass"    
var="office_dts"
/>

<sql:query var="office" dataSource="${office_dts}">
select * from office_tbl
</sql:query>

MysqlのtestDBのoffice_tblへ接続したいのですが、下記のエラーが出てしまいます。

DataSourceが無効ということは、url="jdbc:mysql://localhost/test" の部分が違うということでしょうか?
また、パスワードは設定してみたのですが、以前からMySQLを使用するとき、パスワードの入力を求められたことがありません。
このあたりがおかしいのでしょうか?

よろしくお願いいたします。

--------------------------------

javax.servlet.ServletException: DataSource が無効であるため、Connection を取得できません:
"Invalid authorization specification, message from server: "Access denied for user: 'root@127.0.0.1' (Using password: YES)""
org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)
org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)
org.apache.jsp.OfficeList_jsp._jspService(OfficeList_jsp.java:80)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)

こんにちは。
EclipseもJavaも初心者ですが、学習本を頼りにJSPでMysqlに接続しようとしています。

<sql:setDataSource
driver="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost/test"  
user="root"
password="pass"    
var="office_dts"
/>

<sql:query var="office" dataSource="${office_dts}">
select * from office_tbl
</sql:query>

MysqlのtestDBのoffice_tblへ接続したいのですが、下記のエラーが出てしまいます。

DataSourceが無効ということは、ur...続きを読む

Aベストアンサー

Eclipseのバージョンが古すぎますね。
そのEclipseだとEclipseからのTomcatの起動は
出来の悪いSysdioTomcatプラグインがいるでしょう?
現在のEclipseの最新は3.42です。

これにはTomcat等を扱える機能が内臓されています。
eclipse3.42”Eclipise IDE for Java EE Developers”
なお3.42にはいくつかの種類に分かれているが必ず
”Eclipise IDE for Java EE Developers”
をDLすること。

Qマルチスレッドプログラミングの良技術書籍

C++言語を用いてマルチスレッドを用いた開発を行う予定ですが、
当方マルチスレッドを用いた開発の経験がなく、
事前に前提知識を付けておきたいと思うのですが、
マルチスレッドプログラミングにおいて、
この書籍が分かりやすい、もしくはバイブル的な書籍があれば、
ご教示お願い致します。
ちなみに開発環境はVC++2005です。

Aベストアンサー

http://www.amazon.co.jp/dp/4756116825
かなり古いけどお勧め。
ちなみにSolarisとWindowsでは殆ど互換(パラメタの並びがちがうだけ)ですがLinuxでは動きません。

QEclipse3.5EEでJavaのコンパイルエラーメッセージ

がでました。
以下の通りです。

Multiple markers at this line
- The import javax.persistence.GenerationType.IDENTITY cannot be resolved
- Syntax error, static imports are only available if source level is 1.5

これはどういう意味でしょうか?
特に「source level is 1.5」の意味を教えてください。

環境は
Fedora11
Eclipse EE Developer 3.5 (Galileo)
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Server VM (build 14.0-b16, mixed mode)
です。

Aベストアンサー

コンパイルするためにはJava 1.5では駄目、ということ。おそらく、コンパイルの準拠レベルが1.5になっているのだろうと思う。「プロジェクト」の「プロパティ」メニューを選び、「Javaコンパイラー」の項目にあるコンパイラー準拠レベルが1.6になっているか確認する。おそらく1.5以前になっているのではないかと思う。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報