「夫を成功」へ導く妻の秘訣 座談会

エクリプスで開発してます。
これまで javaファイルを修正・保存後、
メニューの 実行 --> Javaアプリケーション とすると、
最新のクラスが反映されて実行できていたんですが、
この一週間くらい前から 最新クラスが反映されなくなって
しまいました。

プロジェクト管理ツールに Maven2 を使用しているのですが、
Maven2 で該当プロジェクトを実行 --> プロジェクトのクリーン
を行うと、きちんと最新クラスが反映されます。
ちなみに、ファイル管理には SVN を使用しています。

なぜ急に、実行 --> Javaアプリケーション(もしくは 実行
--> 構成及び実行)で最新クラスが実行されなくなったのか、
また、どうやったら最新クラスを実行できるようになるのか、
分かりましたら、よろしくお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

最新のクラスが反映されないのは、実行前にコンパイルがされていないからだと思います。



多分ですが、今まではmaruuuさんのEclipseの設定で「起動前にビルド」が有効になっていたのだと思います。
自分の環境(Eclipse3.1.1+言語パック)だと以下のような感じで設定可能です。

「ウィンドウ」→「設定」→「実行/デバッグ」→「起動」
で、その画面内に「起動前に(必要に応じて)ビルド」というチェックボックスがあるのでそれにチェックします。

この設定で実行時に自動で更新したファイルのみコンパイルされます。
(Eclipseのバージョンが違っても大体同じ所に設定する所があると思います。)
    • good
    • 1
この回答へのお礼

Pkakedashiさん、回答いただきありがとうございます。

早速、設定の汎用オプションをチェックしましたが、
「起動前に(必要に応じて)ビルド」にチェックは
入っていました。

確かに、環境周りだとは思うのですが。。。
すみません、せっかく教えて頂いたのに。

もうちょっと いろいろ試してみたいと思います。

お礼日時:2007/09/26 09:27

自信があっただけにちょっとガーンΣ( ̄Д ̄;)



でも、めげずに回答させて下さい。
Maven2を使用しているとのことですが、最新クラスが反映されなくなった直前にMavenによってclassファイルのクリーン等しませんでしたか?

自分はMavenでは無くantを使っているのですが、antでコンパイルやクリーンをした後にEclipseの方でビルドをすると修正したファイルがあるにもかかわらずコンパイルがされませんでした。
(クリーン後はclassファイルが無いにもかかわらずです。)
Eclipseで再度ビルドが有効にするには、Eclipseのタブの「プロジェクト」からクリーンを行った後に、ビルドすると今度はコンパイルが通ります。

なので、一度「プロジェクト」からクリーンした後にビルドし、その後、修正→実行とした時に修正したクラスが反映されるか試してみたらいかがでしょうか?

ただ、今回は何故antでコンパイルやクリーンした後にEclipseのビルドが有効になってくれないのか理由が分かっていないので、もしかすると違うかもしれません。。。
今回は、自信が有りませんので参考意見として捉えて下さい。
    • good
    • 0
この回答へのお礼

Pkakedashiさん、再度 ありがとうございます!

通常 Maven2 でビルドを行う場合、
1) Maven2 clean
2) Maven2 Build
3) Eclipse 「プロジェクト」-->「クリーン」
という方法を取っていました。(ご存知とは思いますが
Maven2 だけですと、実行したクラスで使っている他のクラスを
実行時に認識しない場合がありますので)

そこで、ご指摘の通り、
1) Eclipse 「プロジェクト」-->「クリーン」
2) Maven2 clean
3) Maven2 Build
で、実行を行うと クラスを認識しませんでしたので、再度、
4) Eclipse 「プロジェクト」-->「クリーン」
として、実行したいクラスに修正を加え、保存して実行したところ、
先週のように、すぐ最新のクラスとして 反映してくれるように
なりました!(^^)v

ただ、「プロジェクト」の「自動的にビルド」にチェックを
入れた後 なので、そこも原因だったのでは? という気もしてます・・・

とりあえずはうまく行きそうなので、ホッとしているところです。
原因が明確に分かっていないところが 残念ですが、
回答頂いたお陰で 良くなりましたので、本当に感謝しています。
ありがとうございました!

お礼日時:2007/09/26 13:51

このQ&Aに関連する人気のQ&A

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

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

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

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

QEclipse「リフレッシュ」と「クリーン」の違い

Eclipseでプロジェクト「リフレッシュ」と「クリーン」がありますが、どう違うのでしょうか?

■質問背景
・Androidでエミュレータ内容が切り替わらないときがあるのですが、キャッシュか何か関係あるのかな、と思い質問しました

Aベストアンサー

Androidエミュレータはわかりません。
Eclipseでは、下記のことを指しています。
リフレッシュ→OSのファイルシステムと、Eclipseのワークスペースのファイル構造を同期すること。
クリーン→クリーンは、クリーンビルドのことでjavaのclassファイル等の成果物を削除し、コンパイルし直すこと。

QEclipseでクラスファイルが生成されない

Eclipse(Helios)、java(JDK1.6)の環境で作業をしています。

指定した出力フォルダにクラスファイルが生成されません。
先日までは生成されていました。
コンパイルエラーはありません。

Javaのビルドパス ⇒ ソース ⇒ デフォルト出力フォルダの指定です
ソースフォルダごとの出力フォルダの指定を可能にするはオフにしてあります。

設定は少しくらい変えたかも知れませんが、重要なところは変えていないと思います。
# あやふやですみません。
考えられる理由を教えてください。

Aベストアンサー

Eclipseのバグとか?

プロジェクトが複数あって
同じクラスが存在していたりすると
デバッグ中に別のプロジェクト見たりもするし

それ以外のプロジェクトを閉じるなりすると
上手くいくかも?

QEclipse(JAVA)のデバッグで他のプログラムが起動してしまいます。

Eclipseを使っています。JAVAで4つほどパッケージを作り、分野ごとに短い練習用のプログラムを作って勉強して来ました。

ところが4つ目のパッケージを作った時から実行させたいクラスではなく、全然別のところにある関係ないプログラムを実行するようになってしまいました。

Eclipseの実行のアイコンの▼を押せば目的のプログラムを走らせるところまでは、分かりましたが、その一覧の中に実行させたいプログラムはありませんでした。

ネットでも色々調べましたが、私はここでギプアップです。どなたか私が新たに作成したプログラムを実行させる方法を教えて下さい。

Aベストアンサー

どうも状況がつかめませんが、

Eclipseはプログラムを実行する際、「実行の構成」が必要で、それに基づいてプログラムが
実行されることを理解されていますでしょうか?

実行ボタンの▼でドロップダウンされる一覧は「過去に」実行した「実行構成」の一覧で、
「実行構成」を素早く実行するためのものです。プロジェクトを作成しても自動的には追加されません。

また、「実行」ボタン押下は最も最近***実行できた***「実行構成」を実行します。

「実行の構成」は、プロジェクトの右クリック→[Javaアプリケーションの実行]や
メインクラスの右クリック→[Javaアプリケーションの実行]などで、ほとんどの場合
メインクラスのクラス名から名づけられ自動生成されます。名前は後で「実行」→「実行構成」で
「実行構成」を選び、好きに変更できます。

もし、メインクラスの右クリックで「Javaアプリケーションの実行」が現れないということなら
おそらく、プログラムに問題があり、プロジェクトを実行できないからなのでしょう。Eclipseが自動で
プロジェクトの実行構成を作れないのです。問題ウィンドウなどをよく見て、エラーメッセージを
確認してください。メインクラスに 所定の形式の mainメソッドがないとか?

どうも状況がつかめませんが、

Eclipseはプログラムを実行する際、「実行の構成」が必要で、それに基づいてプログラムが
実行されることを理解されていますでしょうか?

実行ボタンの▼でドロップダウンされる一覧は「過去に」実行した「実行構成」の一覧で、
「実行構成」を素早く実行するためのものです。プロジェクトを作成しても自動的には追加されません。

また、「実行」ボタン押下は最も最近***実行できた***「実行構成」を実行します。

「実行の構成」は、プロジェクトの右クリック→[Javaアプリケーシ...続きを読む

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

Qclassファイルが作成されない

コマンドを使ってjavaを実行しclassファイルを作成しようとしているのですが、実行できません。

実行したいパターンとしてhtml→javaファイルを呼び出す形にしたいのですが、クラスファイルができません。
javaファイルの存在する箇所に設定し,javac srv_escape.javaを記入すると
以下のエラーが出ました。このときの解決策はどのようにすればいいのでしょうか?
Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main と出ます。
他のQ&Aを見たりはしてたのですがよくわからなかったので質問しました。
このときの状態としてjavaソースの場所はC:\Program Files\Apache Tomcat 4.0\webapps\jsp10でjavac.exeファイルあり。
htmlファイルはC:\Program Files\Apache Tomcat 4.0\webapps\jsp10\day08-2においています。

ソース内容が
html
<html><head>
<title>予約文字のエスケープ></title>
</head>
<body>
<h1>予約文字のエスケープ</h1>
<form name="POST" action=/jsp/servlet/srv_escape">
入力文字:
<input type="text" name="esc" size="30" />
<input type="submit" value="送信" />
</form>
</html>

java
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class srv_escape extends HttpServlet {
int i;
public void doPost(HttpServletRequest request,
HttpServletResponse response )
throws ServletException,IOException {
response.setGontentType("text/html;charset=Shift_JIS");
PrintWriter out=response.getWriter();
out.println("<html><head>");
out.println("<title>予約文字のエスケープ</title>");
out.println("</head><body>");
out.println(<h1>予約文字のエスケープ</h1>");
out.println("入力した文字:");
out.println(strEscape(request.getParameter("esc")));
out.println("</body></html>");
}
private String strEscape(String strEsc){
StringBuffer strResult=new StringBuffer();
for(int i=0;i<strEsc.length();i++){
switch(strEsc.charAt(i)){
case '&':
strResult.append("&amp;");
break;

case '<' :
strResult.append("&lt;");
break;

case '>' :
strResult.append("&gt;");
break;

default:
strResult.append(strEsc.charAt(i));
break;
}
}
return strResult.toString();
}
}
です。
よろしくお願いします。

コマンドを使ってjavaを実行しclassファイルを作成しようとしているのですが、実行できません。

実行したいパターンとしてhtml→javaファイルを呼び出す形にしたいのですが、クラスファイルができません。
javaファイルの存在する箇所に設定し,javac srv_escape.javaを記入すると
以下のエラーが出ました。このときの解決策はどのようにすればいいのでしょうか?
Exception in thread "main" java.lang.NoClassDefFoundError:com/sun/tools/javac/Main と出ます。
他のQ&Aを見たりはしてたのですがよくわか...続きを読む

Aベストアンサー

>変わりにjavax.servlet/javax.servlet.httpは存在しません、というメーセージが表示されます。

それが、先の回答で書いた「次に必ず出くわすエラー」です。やっぱり、ライブラリを認識してませんね。

クラスパスが正しくないんでしょう。
あるいはJREおよびJDK内のJREのそれぞれのlibにあるextフォルダに、必要なライブラリファイルを全部コピーしてしまえば、クラスパスの指定をしなくても認識できるでしょう。

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

Q「httpステータス404」というエラーが出ます。

「httpステータス404」というエラーが出ます。

java初心者です、宜しくお願い致します。
EclipseでServletを書いてやりましたが、以下のようなエラーが出ます、
原因はなんでしょうか、宜しくお願い致します。
「httpステータス404-/Servlet%E7%B7%B4%E7%BF%92/ ServOutput」

Aベストアンサー

Not Found
という意味です。
そのファイルが無い。あるいはリンクが間違っています。
詳しくは参考URLをみてください。

参考URL:http://ja.wikipedia.org/wiki/HTTP_404

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

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

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

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


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

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

Aベストアンサー

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

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

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


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

人気Q&Aランキング