- ベストアンサー
java macとwindowsの互換
以前windowsを使用していてmacに乗り換えた者です。 ある日、プログラミングをしているとwindowsでできていた、プログラムが正常にmacでは反応しませんでした。自分プログラムのせい?と思い、ネットにあるサンプルプログラムをいくつかコピペしてみても正常に反応しません。 windowsとmacでは、同じプログラムではダメなのでしょうか? javaは、windowsとmacの互換性がないのでしょうか? 教えてください。お願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
円記号とバックスラッシュですが、ちょっと複雑な事情があって。 プログラムでエスケープ文字として使われるものは、ASCIIコードで0x5cのものですが、 Windowsでは円マークです。 このコードには、Mac( や欧米フォント)ではバックスラッシュがわりあてられています。 # 正確に言うとややこしいので、詳しくは検索でもしてください。 半角の円マークには別のコードが割り当てられているので バックスラッシュ"は、 "の文字そのものの意味。 円マーク" は、そのまま 円マークの後に"で文字列が終了、の意味になります。 この違いによって、"の対応がおかしくなって、 「文字列リテラルが閉じられていない」("の対応が合わない) 「\9632 は不正な文字です。」 ≠9632は ■ 。本当は文字列の中にあるべき文字が、プログラムの中に登場しているためのエラー 等となっているのです。 Macのキーボードから、Optionキーと同時に円マークキーを押すと入力できます。 # 最初からエラーメッセージが書いてあれば、昨日の段階でこの回答ができました。 # 1日無駄になったんです。
その他の回答 (3)
- yamada_g
- ベストアンサー率68% (258/374)
とりあえず記載されたエラーの一部についてのみですが、 macではエスケープ文字は円マークではなくてバックスラッシュにしなければいけないのでは?
- satomi3951
- ベストアンサー率71% (98/137)
> class com extends JFrame{ > public static void main(String args[]) { > > JFrame frame = new JFrame("新しいコンポーネントを追加したウィンドウ"); > frame.setVisible(true); > } これじゃ、Windowsだろうと思うようにならないんじゃない? JFrameのインスタンス生成して表示してるだけだから comのインスタンス生成しないと。 JFrame frame = new com(); frame.setTitle("新しいコンポーネントを追加したウィンドウ"); frame.setVisible(true); じゃないのか?
- kmee
- ベストアンサー率55% (1857/3366)
具体的に、何がどんな風に「反応しません」なのでしょうか? 何かエラーメッセージが出るとか、は無いのですか? MacのOSのバージョンは? Javaはインストールされていますか? # 過去の質問もそうなのでが、具体的な症状が無いと、答えるほうも答えられません。 手許のMac(OS10.7.5, Java1.7.0u7)で、以前「勉強中」とあった http://www.javadrive.jp/tutorial/jframe/index1.html のサンプルをコンパイルして実行しましたが、実行例の通りに実行できています(WindowsとMacのGUIのデザインの違いはありますが) 基本的に、違いはありません。 ただし、OSに依存するライブラリとか、JNIを使って特定環境用ネイティブコードで書かれたライブラリとかは動作しません。 MacのOSバージョンによって(10.7以降)はJavaをインストールする必要があります。 http://www.java.com/ja/download/faq/java_mac.xml システムのディレクトリ構成、パスの指定など、Windows用の資料がそのまま使えないものがあります。 例えば、よくある「PATHにC:\Program Files\Java~を追加」などの設定は、Macでは意味がありません。
補足
回答ありがとうございます。 私の過去の質問もみてくださってとてもありがたいです。 まず、私のmacの詳細⬇ Mac OS Xのバージョン 10.7.5 プロセッサ 2.7GHz Intel Core i5 メモリ 12GB です。 java⬇ JDK 7 Update 07.pkg です。 エラーの詳細⬇ このプログラムをコピペしました。⬇ URLhttp://www.javadrive.jp/tutorial/appli_word/index7.html TextPaneTest.javaのコンパイルエラー⬇ TextPaneTest.java:179: 文字列リテラルが閉じられていません。 sb.append("<html><font color=¥""); ^ TextPaneTest.java:181: \9632 は不正な文字です。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:181: 式の開始が不正です。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:181: 型の開始が不正です。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:181: 式の開始が不正です。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:181: 文字列リテラルが閉じられていません。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:181: 文ではありません。 sb.append("¥">■</font></html>"); ^ TextPaneTest.java:346: class、interface、または enum がありません。 RtfFilter.java : ^ TextPaneTest.java:349: class、interface、または enum がありません。 import javax.swing.*; ^ TextPaneTest.java:350: class、interface、または enum がありません。 import javax.swing.filechooser.*; ^ エラー 10 個 です。 私のプログラムです。⬇ //Compornent import javax.swing.JFrame; import javax.swing.JPanel; import java.awt.BorderLayout; import java.awt.Color; class com extends JFrame{ public static void main(String args[]) { JFrame frame = new JFrame("新しいコンポーネントを追加したウィンドウ"); frame.setVisible(true); } com() { setBounds(100,100,600,400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); JPanel p1 = new JPanel(); p1.setBackground(Color.black); add(p1); } } コンパイルすると次のエラーが出ます。⬇ ・パネルの色を黒に設定しているのに、黒にならない。 ・setBoundsが働いてない。(ウィンドウの大きさも位置も0になってる。) です。
補足
回答ありがとうございます 回答内容についてですが、macの場合、オブジェクトを作るとき(ウィンドウの)は、JFrame frame = new JFrame(""); ではないと以下のようなコンパイルエラーが出てしまいます。⬇ com.java:12: シンボルを見つけられません。 シンボル: コンストラクタ com(java.lang.String) 場所 : com の クラス JFrame frame = new com("新しいコンポーネントを追加したウィンドウ"); ^ エラー 1 個 となります。 ウィンドウズでコンパイルする場合には、その逆(JFrame frame.........はできなくて、com c = new.........または、JF = com..でないと同じコンパイルエラーを起こす)になります。