トップページ⇒tech
982コメント338KB

ネタ心者歓迎!今更ながらにJava相談室 その4

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
                        
 || ̄ ̄|   ∧_∧
 ||Java|  (     )   ∧∧    / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ||__|  ( ○  )  (   ) < 俺達の旅はここから始まる。
   ||    │ |  │   /  |    \___________
((二二)) .(_(__)〜(___ノ

( ゚Д゚) < カキコする前に>>2-10をチェックしとけゴルァ!!
>>2 過去スレの一覧
>>3 Javaの基礎と よくある質問 (初心者はここをチェック!)
>>4 Java関連スレいろいろ
>>5 Javaを撲滅させたい方、死滅を心配してる方、Cとの違いを知りたい方はこちらへ
* 諸般の事情により、リンクがずれる事もあります。
0783777NGNG
>>782
え!!っていうことは「MS932」がサポートされてなくてもJavaとしてはしらねぇって事!?
つまり、InputStreamReader(inputStream, "MS932")ってコーディングはマルチプラットフォームにならないって事!?

そんなぁ〜(泣)

いや、だったら余計自分のVMがサポートしてる文字列を取得したいよ

やりたい事は、UTF-8で読み込んだファイルを色々なエンコードでファイル保存。なんだけど。。


0784782NGNG
SunのJDKだとコンバータクラスはsun.ioパッケージだからなあ…

JAVA_HOME\jre\lib\rt.jar
JAVA_HOME\jre\lib\i18n.jar
あたりにどんなコンバータクラスがあるか調べればいいかな?
解凍するとか(!)リフレクション使ってどんなコンバータクラス
持ってるか調べるとか…
0785777NGNG
>>782
色々ありがとうございます。
調べてString[]={"MS932" ,"Cp1252" ... とテーブルにしておいたとしても
それはSunのJDKを使用しないと動作保障されないって事ですよね・・

だったらSunのJDK専用ソフトって事でもいいんだけど
せめて起動時にSunのJDKで動いてなかったらワーニングダイアログ出したいが・・
jvmの種類を調べるAPIってないですよね?バージョンは取れるんですが・・

このソフトあきらめるか・・(泣)

0786デフォルトの名無しさんNGNG
>>783
1.4では標準化されてjava.nio.charsetパッケージに
収録されてる。java.nio.charset.Charset#availableCharsets()
あたりでいけそう。問題は1.4でいいのかってところかな。
0787782NGNG
>>785
Systemのプロパティに
java.vm.vendor=Sun Microsystems Inc.
とかあるけど…なんか変な方に逝ってるような。

クラスローダやリフレクションあたりのテクニックで、
実行時に、指定したエンコーディングを行えるコンバータ
クラスがあるかどうかチェックしてみる、というのが
やりたいことの実現としては一番近いかも。

>>786
1.4正式リリースまで待てば、解決ですか。
0788デフォルトの名無しさんNGNG
えっと、数値を右揃えに整形するのに、

String s = "00000" + value;
s = s.substring(s.length() - 6);

よりもいい方法ってありますか?
0789デフォルトの名無しさんNGNG
public class Hoge {
    String s = "\u000a";
}
これ、なんでコンパイル通らないんでしょうか?

public class Hoge {
    String s = "\012";
}
こっちは通るんですが。
0790JAVA厨NGNG
Javaこのごろ書き始めた初心者です。

Appletのサブクラスのpaint(Graphics g)に、直に
g.drawstring("hoge",100,100);
とすれば、hogeは当然書き出されますが、この文を「talker」という
クラスとそのなかにdrawTalk(Graphics g)メソッドを作って、
Appletのサブクラスのpaint(Graphics g)からGraphic gを引き渡して
呼び出そうとすると、コンパイラにGraphicsクラスがない、と怒られます。
「ジャワハウス」さんの方でいろいろ検索してみると、
Graphicsクラスのサブクラスにすべきでない、とか
Canvasクラスのpaintメソッドでやる、とか
書いてあったのですが、初心者ゆえわからずじまいです。

そこで質問なのですが、appletのサブクラスのPaintメソッドで
かかれるようなものを上記のように別クラスで実現させる方法を
教えていただけませんか?

こんなもの前にスレで回答は出てる、のならそのスレを教えていただけませんか?
また、このサイトに実例が載ってる、というものがあれば
それも教えていただけませんか?

厨房ですが、宜しくお願いします。


0791デフォルトの名無しさんNGNG
>>790
>コンパイラにGraphicsクラスがない、と怒られます。
これは、java.awt.Graphicsをimportしてないってことじゃないの。
0792 NGNG
>>789
0x0aはNew Lineだからではないかな。
http://www.e-words.ne.jp/page.asp?p=r-ascii

つまり
public class Hoge {
  String s = "\u000a";
}
は
public class Hoge {
  String s = "
";
}
に等しいのでは。
0793JAVA厨NGNG
>>791
でました。すみません。
0794 NGNG
>788
>えっと、数値を右揃えに整形するのに、
>String s = "00000" + value;
>s = s.substring(s.length() - 6);
>よりもいい方法ってありますか?

DecimalFormat f = new DecimalFormat("000000");
String s = f.format(value);
というやり方もあります。
0795780NGNG
BufferedImage im;

init()
{
…
im=new BufferedImage(100,100,BuffedImage.TYPE_INT_BGR);
}
こんなかんじでここで実行事例外が出ちゃいます

プログラム自体これだけのものなんですが
0796デフォルトの名無しさんNGNG
>>795
BufferedImage が
Java 2(jdk1.2)以降でないと使えないのを知らない、
とかそーゆー事ではないよね?
0797デフォルトの名無しさんNGNG
>>795
BufferedImageはjdk1.2以降じゃないと使えない。
ブラウザは対応している?
0798780NGNG
>Java 2(jdk1.2)以降でないと使えないのを知らない
これはわかってました
>ブラウザは対応している?
IE5じゃ対応してナインスカ

ピクセル操作したかったんですけど他になんか
いいクラスはないでしょうか?


0799デフォルトの名無しさんNGNG
JDKかJREの最新版入れているならIEの詳細設定で
MS版とSUN版のVMきりかえられるんじゃなかったっけ?
0800デフォルトの名無しさんNGNG
UnsupportedEncodingExceptionが発生するかどうかで判断したらよくない?<サポートしてるエンコード

それはそうと
"Shift_JIS" == "MS932" != "SJIS" ってのは合ってますか?>識者の方
0801デフォルトの名無しさんNGNG
Shift_JIS が SJIS になるのっていつからだっけ?
どっかで読んだ記憶が…
0802 NGNG
"Shift_JIS" != "MS932" != "SJIS"
だと思った。
0803 ◆JavaWbug NGNG
MicrosoftVisualJ++は、何か使い道残ってませんかねぇ?
0804デフォルトの名無しさんNGNG
掲示板に書き込むと、「http://www〜」がリンク付きで(クリッカブルURL?)
表示されるのをBeansで書いてみたいのですが、javaって正規表現がなかった
ような・・・ここからここまでがurl〜というのをどうやって検索するもの
でしょうか?よろしくお願いします。(既出でしたらごめんなさい)
0805デフォルトの名無しさんNGNG
>>800
http://www.ingrid.org/java/i18n/encoding/table-j.html
0806デフォルトの名無しさんNGNG
>>804
正規表現のパッケージはいくつかあるよ。
例えば、
http://jakarta.apache.org/oro/index.html
見てみて。
0807800NGNG
>>805
まとめると、1.2以降では
"Shift_JIS" == "MS932" != "SJIS"でいいってことだね。
そもそも、1.1.xには"MS932"がないから"Shift_JIS"使うしかない、と。

もう1.3しか使わないから"Shift_JIS"でいいや。ありがと。
0808デフォルトの名無しさんNGNG
>>800
ちなみにこっちも見ておくと良いかも。
http://www.ingrid.org/presentations/javaone-japan-2001/
0809804NGNG
>806
ありがとうです〜
こんなクラスがあるのですね!英語が苦手なので、
http://www.ingrid.org/jajakarta/oro/
を見ました。マニュアルがまだ英語なんですね・・・
実際に書く場合、先頭が「http://」から始まる、が必要なのは
分かるのですが、逆に文末(?)の判断はどのように書くべきなの
でしょうか?よろしければお教え下さい。
0810デフォルト名無しNGNG
1秒ごとにアプレットを描写し直したく、いろいろイジクっているのですが、
次のソースで、ボタンをクリックするとフリーズしてしまいます。

public void actionPerformed(ActionEvent E){
long t1 = System.currentTimeMillis();
int i = 0;
for(i =0; i <60; i++){
while( System.currentTimeMillis() - t1 <1000){
}
t1 = System.currentTimeMillis();
this.currentAngle -= 6;
if(this.currentAngle == 0 ){
this.currentAngle = 360;
}
repaint();
}
}
1秒ごとのアクションは、これではできないのですか?
良い方法があったら教えてください。
0811 NGNG
>>810
別スレッドでrepaint()したら。
0812 NGNG
>while( System.currentTimeMillis() - t1 <1000){}
それと、これも止めてsleep(1000)にしたら。
0813デフォルトの名無しさんNGNG
private Thread animator = null;
public void actionPerformed(ActionEvent E){
  if(animator != null)  return;
  animator = new Thread(){
    public void run(){
      Thread.sleep(1000);
      currentAngle -= 6;
      if(currentAngle == 0){
        currentAngle = 360;
      }
      repaint();
    }
  };
  animator.start();
  return;
}
0814↑NGNG
ループさせてなかったし例外も忘れてた。

public void run(){
  try{
    while(! isInterrupted()){
      Thread.sleep(1000);
      currentAngle -= 6;
      if(currentAngle == 0){
        currentAngle = 360;
      }
      repaint();
    }
  } catch(InterruptedException e){/* */}
  return;
}

停止させるときは:

animator.interrupt();
animator = null;
0815デフォルトの名無しさんNGNG
ちょっと気になったんだけど、
instanceofってあるじゃん?
それって
左辺はObject型だよね〜。
右辺ってなに?
(String型か、)Class型とかで代用できるの?
0816デフォルトの名無しさんNGNG
>>808
これって将来的に"Shift_JIS"使えなくなる(SJIS相当になる)ということ?
HTTPヘッダでcharset=Windows-31Jとか返すのか・・・
そんなの嫌だ・・・
0817デフォルトの名無しさんNGNG
>>798
java.awt.image.MemoryImageSource
0818デフォルトの名無しさんNGNG
>815
instanceofっていうバイトコード命令があるんです

Classで判定したいときは
Class.isInstanceOf(Object object)
を使いませう
0819デフォルトの名無しさんNGNG
>>815
>818の答えは微妙にずれているような、、、
強いて言えば参照型の識別子
オブジェクト変数の宣言の行の頭に書いてあるものと同じ。

ttp://www.y-adagio.com/public/standards/tr_javalang/15.doc.htm#80289
0820デフォルト名無しNGNG
>>811〜>>814
thanks a lot!!!

なるほど、Theadでの処理ですか?やってみます。
ところで、このやり方は某初心者向けの本を元にしたのですが、
System.currentTimeMillisは処理が重いからということなんですかね?

PS 仮眠してたので、レスが遅くなりました。
  今からバイトです。
0821デフォルトの名無しさんNGNG
>>820
まずいのは while(){} が無駄に CPU パワーを消費していること。
前のソースだと CPU 使用率 100% がずっと続くのでまともな
アプリケーションにはならない。もし「それ」をその本の例でやっ
てるなら捨てて良し。いや、むしろ晒せ。

System#currentTimeMillis() はぜんぜん問題ない。
0822デフォルトの名無しさんNGNG
誰か可愛そうな >>803 に愛の手を。
0823デフォルトの名無しさんNGNG
>>818
Class型はそう使うのか・・・。
でもinstanceofって何故かなじめない・・・。
予約語がbooleanを生成するのが何故か不自然な感じ・・・。
まあ良く使えばそのうち馴染むだろうけど。
0824デフォルトの名無しさんNGNG
>>823
馴染めないで良い。
instanceof を使わなければ何かが出来ない時は、設計者として負けた時だと思え (極論だが)。
0825デフォルトの名無しさんNGNG
>>824
だな。
むやみやたらにinstanceof使ったif文が出てくるソースは見たくない。
0826777NGNG
>>786
貴重な情報ありがとうございます!
エンコードソフトは1.4で作成します。
にしても、正式版いつ出るんでしょうね〜

SJIS != MS932だよね?
0827デフォルトの名無しさんNGNG
>>824
リフレクション絡みや、ダイナミックプロキシとかの
メタプログラミングの手法を取り込んでるときは、
instanceofなしは難しいと思うぞ。フレームワークっ
ぽいの作る時は、汎用性を上げようとするとどうしても…
RMIとかも、バリバリ使ってるみたいだ。
0828デフォルトの名無しさんNGNG
>>803
何事もなかったかのように、マイクロソフト拡張をオンにして、
Windowsアプリをバリバリ書く。
0829デフォルトの名無しさんNGNG
JDBCについて教えてください。
ConnectionからPreparedStatementを取得するけど、
Connectionを閉じてしまっても、そのコネクションから
取得したPreparedStatementはその後も使いまわせますか?
0830780NGNG
イメージバッファに文字を書いて
その文字ピクセルをいじれればとおもったのですが
MemoryImageSourceのバッファをGraphicsで扱えないんでしょうか?
0831デフォルトの名無しさんNGNG
>780
PixelGrabber使えばImageオブジェクトから
ピクセル値をbyte配列で取り出せるよ
0832デフォルトの名無しさんNGNG
>>831

けどさ、PixelGrabber って、普通に自前で生成した BufferedImage に対して
使うと、実はちょっと変になって出力されたりしないか?


Shape s = new Polygon(〜〜);
Graphics2D g = (Graphics2D)imageBuffer.getGraphics();
g.draw( s);
g.fill( s);

なんか、fill メソッドに Shape オブジェクトを渡して塗ろうとしたときに変に
なるんだよね。塗られる位置が 1ピクセルほどズレたりする。


これは俺の予測では、Raster と SampleModel をしっかり調整しないとダメっぽ
いような気がしている。

俺はもうこの時点で、疲れて別の代替策を考えたけど・・・< Shape オブジェクト
で塗る。
0833デフォルトの名無しさんNGNG
Windows98 系で動く EJB サーバなんてあるでしょうか?????
0834デフォルトの名無しさんNGNG
>>833
Win98系でEJBサーバ動かす意味なんてあるでしょうか???
0835デフォルトの名無しさんNGNG
>>834

都合により、どうしてもやりたいんですが、、、
やはり、存在しないんですかね。
0836デフォルトの名無しさんNGNG
>>832

追記。
PixelGrabber が悪いわけじゃなくて、BufferedImage の fill メソッド
がちょっとおかしいじゃないか?

というお話し。
0837デフォルトの名無しさんNGNG
>>835
PureJavaで出来てれば、動く事は動くでしょ。
起動用の環境設定のやり方を教えてくれるネタがないだけで。
0838デフォルトの名無しさんNGNG
>>829
無理。同時に PreparedStatement もクローズされる。
つーか、やってみりゃいいだろ。
0839デフォルトの名無しさんNGNG
>>835
保証外ってだけで動いてしまうものもけっこうあると思われ、、、
0840デフォルトの名無しさんNGNG
>>833
大抵の Windows 用 EJB コンテナは動くとおもわれ。
0841デフォルトの名無しさんNGNG
>836
BufferedImageにピクセル単位でアクセスしたいときは
WritableRaster使うのが普通なんでないの?
0842 NGNG
Windows98でEJBの勉強しようかなと思って
J2EEをDLしてきて、"j2ee -verbose"を実行しようとしたら
"構文が違います"というエラーがでました。

調べたら%J2EE_HOME%bin\setenv.batの
set JAAS_OPTIONS=-Djava.security.auth.policy=%J2EE_HOME%\lib\security\jaas.policy
という文が駄目なようです。"="が2回出てくるのがWin98的に不味そうです。

元々J2EEはWindows98での動作保証なんて無いのは知ってましたが、
やっぱり無理なのかにゃ?

Windows98の環境変数の値に"="を含める方法ってありますか?
0843デフォルトの名無しさんNGNG
-Djavaなんたら ってのはJVM起動オプションなので、
環境変数から取らないで、自前で起動バッチ作る方が
速いかもねー。
0844デフォルトの名無しさんNGNG
ちゅうか、普通、そんな J2EE 付属のじゃなくて、

http://www.jboss.org

みたいなコンテナ専用サーバ使うんじゃないのけ?
0845デフォルトの名無しさんNGNG
2000いりゃれりゃあああ
0846842NGNG
>>843 それでもいいかにゃ?
>>844 なんか素晴らしそう。フリーかにゃ?
>>845 無職で引き篭りの俺にそんな金はねえぇぇぇぇんです!!!バカ!!
0847845NGNG
バカとはなんだバカとは
0848デフォルトの名無しさんNGNG
>>846

しかし、俺が試してみたところ、俺は Windows98 ユーザだが、
うまく動かなかったがな。
0849デフォルトの名無しさんNGNG
2000ホチイヨー。XPは要らん。
0850デフォルトの名無しさんNGNG
Micromedia JRun Server 3.1J Developer版 (日本語)
Linux, Solaris, Win95, Win98, WinNT, Win2000 ― 無期限, 同時接続制限 3
http://jrun.itfrontier.co.jp/product/JRun_Server_30.cfm

IBM WebSphere Application Server Advanced Single Server Edition 4.0, Developer (日本語)
Linux, WinNT, Win2000 ― 六ヶ月有効版
http://www14.software.ibm.com/webapp/download/search.jsp?go=y&rs=wsassed

BEA WebLogic Server 6.1 (英語? 使ったことない)
WinNT, Win2000, Solaris, HP-UX, AIX, Linux
http://commerce.bea.com/downloads/weblogic_server.jsp

Windows 95 なら JRun がお勧めかな。以前一台の 95 (98だったかも) に JRun 積んで
3人くらいで開発していたから。
0851デフォルトの名無しさんNGNG
>>828
おぉ、バリバリやるぞぉ〜!
レス有難ぉ。
0852デフォルトの名無しさんNGNG
WebObjects5.1から、Servlet,JSP,EJBも使えるようになったよ。
http://www.apple.co.jp/webobjects/index.html

それでも、WOFとEOFには遙かに及ばないけど。
前に仕事で、Servlet,JSP,EJBでやったら3ヶ月かかったアプリを、
個人的に趣味でWOで1から組み直したら1ヶ月かからんかった。

ちなみに、¥72,800の1パッケージに、開発環境&運用環境が入ってる。
開発はWindows2000&MacOSXのみ。
運用は、Java2環境なら全部OK。
対応DBは、JDBC2.0準拠ならなんでも可。
運用環境は、同時接続数無制限、1CPU単位でなく、1サーバ単位で¥7万。
以前は、¥700万以上だったのにな。今や1/100だ。
0853デフォルトの名無しさんNGNG
まえにSwingがいいかAwtがいいかで質問させていただいたものです。
その節はお世話になりました。
多くの方の推薦もあってSwingをはじめました。そこで、次のようなコードを
書いたら動きました。(MouseAdapterのまねです。)

JButton btn = new JButton("BTN");
btn.addActionListener(new ActionListener()
  {
   public void actionPerformed(ActionEvent evt){
    ...
   }
  });

しかし、ActionListenerはインターフェースですよね。こんなことをしても
よいのか疑問になってきました。動くには動くのですが、たまたまなのか、
合法なコードなのか心配なのです。
どなたか教えていただけないでしょうか。
よろしくお願いします。
0854853NGNG
すみません。質問の趣旨は、
「インターフェースであっても、メソッドを上書きするように、
名無しのオブジェクトを作る」(要するに上のようにする)のが、
正しいやり方かどうかです。
よろしくお願いします。
0855デフォルトの名無しさんNGNG
問題ないよ
http://www.gimlay.org/~javafaq/S016.html#S016-02
0856デフォルトの名無しさんNGNG
あなたはそこでActionListerを実装(implements)したクラスをそこで定義しているのです.
深く知りたかったら「無名クラス」について調べてみましょう。
なかなか面白い仕組みです.
0857853NGNG
>>855
>>856
さっそくのレスありがとうございました。
(話の流れから言って、私へのレスですよね。)
なんだか、少しわかったような気がします。
0858デフォルトの名無しさんNGNG
>>832

import java.awt.*;
import java.awt.image.*;

public class FillShape {

public static void main( String[] args){
new FillShape();
}

public FillShape() {
Polygon poly = new Polygon();
poly.addPoint( 8, 0);
poly.addPoint( 16, 8);
poly.addPoint( 8, 16);
poly.addPoint( 0, 8);

ImageViewer comp = new ImageViewer( createImage( poly) );
Frame frame = new Frame();
frame.add( comp);

frame.setSize( 100, 100);
frame.setVisible( true);
}

static Image createImage( Shape shape){
Rectangle rect = shape.getBounds();
BufferedImage image =
new BufferedImage( rect.width, rect.height, BufferedImage.TYPE_INT_RGB);
System.out.println( image);
Graphics2D g = (Graphics2D)image.getGraphics();
g.setColor( Color.blue);
g.fill( shape);
g.setColor( Color.red);
g.draw( shape);

return image;
}

}

class ImageViewer extends Component {
Image image;

public ImageViewer( Image image){
this.image = image;
}

public void paint( Graphics graphics){
graphics.drawImage( image, 0, 0, this);
}
}

// うまく fill されない様子が分かります。
// 改善方法を教えてください。
0859デフォルトの名無しさんNGNG
あ、JHBに投げたね(藁
JDK1.4.0-rcで見ると特に問題ないように見える。(小さすぎてよく解からんけど)
0860デフォルトの名無しさんNGNG
俺も上手く塗れてると思うけど。

赤いラインが切れてるけど、
これはImageのサイズが16*16(0〜15、0〜15)しか無いのに、
16, 8や
8, 16
に塗ってるのが問題かと。

↑Java2Dには全く興味ないしやった事も余り無いので俺の直感なんだけどね。
0861デフォルトの名無しさんNGNG
あ、こういうことかな?

つまり16 * 16のImageの場合、
座標はxが0-16, yも0-16なんだけど
drawLine(0, 0, 0, 16)をした場合
x座標の0と1の間が塗られる。
だから座標の16を指定した場合は、16-17の間が塗られるんだけど
Imageは16*16なので塗ることが出来ない。
0862デフォルトの名無しさんNGNG
たしか、Graphics.draw(Shape shape)の動作って、

Shapeに対して一回り大きいShapeが作られて
そこから元のShapeを取り除いた領域に対してfillが行われる

っていう感じだったと思った。
ので実行結果的にはそれで正常。
0863デフォルトの名無しさんNGNG
>>862
drawにはStrokeが関わるはず・・・
0864デフォルトの名無しさんNGNG
BaiscStroke.createStrokedShape(Shape)
の動作がそうなってる、ということで。
0865デフォルトの名無しさんNGNG
うーん、正確には

> Shapeに対して一回り大きいShapeが作られて
> そこから元のShapeを取り除いた領域に対してfillが行われる

っていうのもちょっと違うんだけどね。
まあ要するにg.draw(shape)するには
shape.getBounds()では狭すぎる、っていうことです。
0866超初心者NGNG
JAVAの超初歩的なことわからなくて聞きたいんですが、JAVAでいうオブジェクトってクラスのことなの?いろんなクラスを組み合わせて一つのソフト作るってこと?なんかクラスとメッソドってよくわかんないのです。誰か助けて!

0867デフォルトの名無しさんNGNG
クラス:オブジェクトの設計図(みたいなもの)
    オブジェクトのもっている状態や振る舞い(メソッド)を記述

オブジェクト:クラス(設計図)によって実際に作成されたもの

って説明でいいかしら?
0868デフォルトの名無しさんNGNG
>>867
>オブジェクト:クラス(設計図)によって実際に作成されたもの
狭義ではそうだが、普通はそれをインスタンスと呼ぶ

広義ではクラスもインスタンスも含めてオブジェクト
0869デフォルトの名無しさんNGNG
>>865 普通は867の理解で困らない。

「クラスもオブジェクトの一種」という考え方は
リフレクションが必要になるまで後回しにしといたほうが
混乱しないで済むと思う。

言語や環境によっては
「クラス ⊂ オブジェクト」が
サポートされてなかったりするし。(C++とか。)
0870デフォルト名無しNGNG
質問です。
Aクラスを継承したBクラスがあります。BクラスではAクラスのdrawメソッド
(図形を描く類)をそのまま使っています。今、AとBの描く図形の色を変え
たいと思い、getFillColor(Graphics g)メソッドを作りBクラスで
オーバーライドしています。そしてAのdrawメソッドの中でgetFillColorを
呼び出して色を決定しようと考えているのですが、違う色になりません。

Bクラスのインスタンスで、オーバーライドしていないためAのdrawメソッドから
呼び出しているgetFillColorメソッドは、BのgetFillColorメソッドを
呼び出さないのですか?
0871870NGNG
Aのdrawメソッド→drawメソッド

すみません。こう読みなおしてください。
0872デフォルトの名無しさんNGNG
>>870
>Bクラスのインスタンスで、オーバーライドしていないためAのdrawメソッドから
>呼び出しているgetFillColorメソッドは、BのgetFillColorメソッドを
>呼び出さないのですか?
そんなことはありません。getFillColorをちゃんとオーバーライドしていれば、
呼び出されます。
0873870NGNG
ソースを出します。やはり呼び出されていません。

package graphicstest;

import java.awt.*;
public class MiniteHand {

protected point2D core;
protected point2D edge;
private point2D uRight;
private point2D uLeft;
private point2D bRight;
private point2D bLeft;
private double length = 100.0;
private gApplet app;
private Color color;

/**デフォルトコンストラクタの空定義*/
public MiniteHand() {}
/**コンストラクタの定義*/
public MiniteHand(int angle) {
/*******ここは関係ないので省略*********/
}
public void draw(Graphics g){

/*******この以前は関係ないので省略*********/
getFillColor(g);
g.fillPolygon(Xs,Ys,Xs.length);
g.setColor(this.app.currentColor);
g.drawPolygon(Xs,Ys,Xs.length);
}
private void getFillColor(Graphics g){
g.setColor(Color.red);
g.drawString("In the MiniteHand",0,30);
}
}

public class HourHand extends MiniteHand {

public static double length = 75.0;

public HourHand(int angle) {
/*******ここは関係ないので省略*********/
}
private void getFillColor(Graphics g){
g.setColor(Color.blue);   //青にならない
g.drawString("In the HourHand",0,40);  //表示されない
}
0874デフォルトの名無しさんNGNG
privateは継承されない
0875870NGNG
失礼コキマシタ(プ
0876へぼへぼNGNG
 はじめまして。へぼへぼな質問をさせてください。
 それは、標準出力で、Serializableなクラスのインスタンスそのものを
出力できないか、ということです。
 やりたいことは、クライアントからProcessをつかってrshをよび、サーバー側
のクラスを実行します。その結果の入ったクラスを、Process.getInputStream
を使い、ObjectInputStream経由で取得する、という物です。
 ふつうに文字列を標準出力した場合は、ちゃんと取得できるので、
全く不可能とは思えないのですが・・・。

 よろしくお願いします。
0877デフォルトの名無しさんNGNG
>>876
出来るんじゃないの?
0878へぼへぼNGNG
>>876
あぅ。やっぱりできるんですね。
今日一日、それで詰まってるんです。
ぜひ、ご教授願います。
0879デフォルトの名無しさんNGNG
【送信側】
AbcBean bean = new AbcBean();
ObjectOutputStream out = new ObjectOutputStream(System.out);
out.writeObject(bean);
out.flush();

----------------------------
【受信側】
ObjectInputStream in = new ObjectInputStream(process.getInputStream());
AbcBean bean = (AbcBean)in.readObject();

これで出来ないなら Base64 かなにかで ASCII にして出力すれば?
ちゅうか、上の説明だけじゃどこで躓いてるのかサパーリわからんよ。
0880へぼへぼNGNG
すいません。もう少し詳しく書きます。
自分なりに調べて、上記の様にはしたのですが、readObject()で、
「UTFDataFormatException」が発生してしまいます。
また、処理を簡略化した物では、「EOFException while reading the
stream header」となってしまいます。
 出力するクラスの規模は全く違うのですが、それ以外は
ほとんど変わりません。

頭がいっぱいいっぱいです・・・。
0881デフォルトの名無しさんNGNG
>>880
なら多分標準出力にバイナリ食わせているのが問題なのだろう。

--------------------------------------
【送信側】
AbcBean bean = new AbcBean();

// シリアライズされたバイナリを取得
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream out = new ObjectOutputStream(baos);
out.writeObject(bean);
out.flush();

// ASCII 文字の 16 進数で出力
byte[] binary = baos.toByteArray();
for(int i=0; i<binary.length; i++){
  System.out.print(Character.forDigit((binary[i] >> 4) & 0x0F, 16));
  System.out.print(Character.forDigit((binary[i] >> 0) & 0x0F, 16));
}
System.out.flush();

--------------------------------------
【受信側】
// ASCII 文字の 16 進数をバイナリに変換
InputStream in = process.getInputStream();
ByteArrayOutputStream baos = new ByteArrayOutputStream();
while(true){
  int ch1 = in.read();
  int ch2 = in.read();
  if(ch1 < 0 || ch2 < 0)  break;
  int bin = (Character.digit(ch1, 16) << 4) | Character.digit(ch1, 16);
  baos.write(bin);
}

// バイナリからオブジェクト復元
byte[] binary = baos.toByteArray();
ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(binary));
AbcBean bean = (AbcBean)in.readObject();

--------------------------------------
もっとちゃんとやりたかったらデータ長と MD5 でも付けれ。
というか一回 RMI を勉強すると幸せになれるかもしれないと思ってみたり。
0882デフォルトの名無しさんNGNG
ゔ、ObjectOutputStream を flush() した後に close() しないとなにか出るかも…。
■ このスレッドは過去ログ倉庫に格納されています