ラベル Java の投稿を表示しています。 すべての投稿を表示
ラベル Java の投稿を表示しています。 すべての投稿を表示

2025-07-07

Java: VSCodeで import文にエラーが出る場合に試して欲しいこと

 たまに、Javaのプログラムを書いている時に表題のようなことが起きるんですよね。。。。いちおう前提として、

  • DropBoxでソースコードを共有
  • 自宅と職場など異なるPCで開発をしている
  • 自宅では問題ないソースコードが、職場だとimport文が真っ赤っか。。。
  • パッケージルートやクラスパスに問題なし(初歩的なミスはしてません)
というのを想定しています。

原因と解決策
エラーの理由はそのクラスが見つからないということなんですが、自宅でちゃんと動いているしー。。。おそらく、自宅でコンパイルしたclassファイルが残っていると思います。これを消してみてください。多分これで解決します。

何が起こっていたのか?
自宅と職場でJavaのバージョンが異なっているので、まずそのままでは動かないクラスになっていました。で、、、VSCodeはクラスファイルがある場合には、ソースではなくクラスファイルを参照して、互換性のないものがあるから、クラスの存在を認識できず、importできない!とエラーを出すわけです。



2025-02-09

Java:標準出力の内容をとってくる方法

 JavaでSystem.out.printlnなどで標準出力に出てくる内容を捕獲する方法です。コンソールへの出力をチェックしたいときに使えます



2022-12-22

MacのJava(Temurin)をアップデートしてみた

愛用しているMacの中で、一部のマシンでJDKのバージョンが古いのが見つかりアップデートを試みたので、そのメモ書きです。意外に情報がすぐに見つからなかったのでハマりました。

Macで動いているJDKが Temurinであることが前提です。TemurinとはOpenJDKの1つで、Eclipse FundationがサポートしているJDKのようです。もともとはいっていたのか、あとから自分で入れたのか。。。ちょっと記憶が曖昧です。

Macで動かしているJavaのバージョンがなんなのか確認してみましょう。

java --version

Temurinであれば、下記のコマンド一発でできます。

brew install --cask temurin

なお、勝手に最新版が入りますので注意しましょう。バージョンを指定したい場合は、temurin8とかtemurin11とかにしてください

2022-09-23

Java: エンコーディングwindows-31jにマップできません

WindowsでJavaをコンパイルした時に、表題のエラーが出るときがあります。

原因

  • ソースコードとWindowsのJava環境で扱う文字コードの違い。

解決策

  • コンパイル時の引数に  -encoding UTF-8 を付ける
補足情報
Windows31Jというのは、別名MS932(CP932)とも言われる日本語を扱う文字コード。Windowsの日本語文字コードはShift JISという認識が根強いが、厳密には異なっている。現状では、MS932(CP932)とか、Windows31Jといいのが正しい。



2020-12-21

Javaのデスクトップアプリで画面が乱れてしまう場合の対処法

最近すっかり見かけなくなったJavaのデスクトップアプリですが、たまにグラフィックドライバとの相性のせいか、画面が乱れてしまうことがあります。その場合は、アプリ(Java)の起動オプションに下記を追記しましょう。

-Dsun.java2d.noddraw=true           

DirectDrawの使用を無効にすることで解決できる場合があります。




2020-09-06

batファイルを利用したJavaプログラムの起動でコマンドプロンプトを非表示にする

 表題のとおりのTIPSです。下記のようにVBScriptファイルを別途用意してそれを起動すればOKということですね。



2017-01-25

Java:nekoHTMLParserを使っていてうまくパーズできない場合の対処メモ

JavaでのHTMLファイルをParseする時は、nekoHTMLParserを使っています。このパーザーはある意味柔軟なところがあり、使い勝手がいいんですが、エラーを全く吐かないまま、正しくParseできないことがあったので、メモ書きです。

【挙動】
  • aタグを検索して hrefの属性値をとってくるプログラムを実行
  • プログラムはエラーなく動作。しかし、hrefの値がとれていないところがところどころある(全てではなく、ところどころ、、というのが厄介)。
  • 正確に言えば、文書中のaタグは漏れなく見つけられているが、値のとれていない(値のない)aタグがところどころ存在する。
【原因と対処法対処法】
  • 文字コードが原因。今回のケースでは、諸事情によりHTMLファイルをコピペで取得し作成したため、文字はUTF-8、メタタグの指定がShift-JISという齟齬が発生していた
  • メタタグの指定をUTF-8に変更
エラーが出ないからうまく動いているだろう、、と気づきにくいところなので要注意です。


2016-04-05

「Java was started but returned exit code=13」というエラーでEclipseが起動しない場合の対処法

PCのデフォルトのJVMとEclipseのバージョンが違うだけですので、揃えましょう。方法としては次のいずれかで。。。

【方法1】
  • JREを入れなおす
【方法2】
  • eclipse.iniに下記を追加

    -vm
    C:\java\jdk1.8\bin\javaw.exe

    #最初の行に。上記のように改行して2行で構成させてOK。


2015-12-25

Java: Arrays.asListメソッドの注意事項

Arrays.asListを使ってString配列からListを作るとaddする時にエラーが発生。なんでかなと調べてみますと、
  • Arrays.asList()使うと固定長のListが生成される
らしいです。固定長のリストなんか意味不明。存在意味ありませんね。では、どうしたら良いかというと、
List list = new ArrayList(Arrays.asList(str));

とすれば良いようです。

2015-06-26

DynamoDB: グローバルセカンダリインデックスを使ってみた(DynamoDBMapper利用編)

ネタ的には古いですが、DynamoDBのグローバルセカンダリインデックスを、高レベルAPIであるDynamoDBMapperクラスから利用してみました。Javaでの記述方法について紹介します。

想定環境
この記事では下記のようなテーブルを作成したとして説明します。
  • テーブルの構造は「ハッシュキー:id、レンジキー:a、通常のアトリビュート:v」
  • このテーブルに対して、「ハッシュキー:v、レンジキー:a」というグローバルインデックスを設定(このインデックス名を「v-a-index」とする)
記述例
例を下記に示しますが、悩みどころはアノテーションの書き方でしたね。複数のアノテーションの書き方に悩みました。あとは、通常の検索方法と変わらないと思います。



2015-03-12

Eclipseを起動させるJava VMのバージョンを指定する

GWTやGAE対応のアプリ開発をするときは、EclipseにGPE(Google Plugin for Eclipse)をインストールするのが普通ですが、現段階でのGPEの動作条件は
Java 7(JRE 7) かつ最新のEclipse
となっています。Javaを利用するのがEclipseだけならまだいいですが、すでにJava8がインストールされていた場合、、、わざわざ新しい方を消すというのも勧められません。共存するためには、EclipseだけJava7で動かす必要があります。で、その方法ですが、eclipse.iniファイルにおいて、
-vm
C:\Program Files\Java\jre7\bin\javaw.exe
という記述を追加すればOKです。ここの書き方の注意点は、オプション名と値を必ず2行に分けて記述することです。 また、-vmargsよりも前に書かないとダメです。


2014-12-26

DynamoDBにてHash+RangeのQuery設定方法(v2対応)

久しぶりにDynamoDB触ってみたら、Hash+RangeのQuery設定方法がv2で変更になっていて、古いコードがエラーになってしまったので。。。。



2014-12-25

GistのJSONデータからファイル情報を取ってくる(gson利用) ~キーがわからないJSONオブジェクトへのアクセス~

Gist APIを使ってJSON形式でGistのコードスニペットを取ってくるプログラムを書いてるんですが、filesの中身にある各スニペットの情報は、ファイル名がキーになっているので、その中身をどうやって取ってくるか?が悩みどころになります。
解決策は下記の通り。なお、JSONのアクセスにはgsonを利用してます。


2013-07-19

RMecab on RServeで簡単な形態素解析をしてみた

RMecabで簡単な形態素解析をして、それをRServe経由で結果を取得してみました。あっさり書いてますが、かなり苦労しました。RMecabの出力結果に応じて変えていく必要がありそうなので、要注意です。



2013-07-01

RServeでJavaからRを呼び出す

RServeを利用してJavaからRを呼び出すサンプルです。

(1)ライブラリのダウンロードとクラスパス追加
http://www.rforge.net/Rserve/files/ から、
  • REngine.jar
  • RserveEngine.jar
の両方をダウンロードして、クラスパスに追加して下さい。

(2)サンプルコード
下記、サンプルではリモートマシンにあるRを呼び出していますが、ローカルの場合はアドレス指定なしでOKです。



2013-04-20

DynamoDB: ローカルセカンダリインデックスを使ってみた(DynamoDBMapper利用編)

早速話題のDynamoDBのローカルセカンダリインデックスを、高レベルAPIであるDynamoDBMapperクラスから利用してみました。以下はJavaDocを見ながら試行錯誤で試してみた速報的なものですので、若干勘違いもあるかもしれません。

なお、ローカルセカンダリインデックスを使うためには、ライブラリのパッケージは
com.amazonaws.services.dynamodbv2.*
以下を使用することになるので注意してください。

ローカルセカンダリインデックスを持つテーブルの作成
テーブル作成時にローカルセカンダリインデックスを定義する必要があります。事後にインデックスを追加することはできないので要注意ですね。


Index Name名というのがよくわからないので、Attributeの名前を同じにしました。

データクラスにアノテーションを記述する
アノテーションの記述方法ですが、ローカルセカンダリインデックスに相当するAttributeについては、
@DynamoDBIndexRangeKey(localSecondaryIndexName ="age")
 public int getAge() {
  return age;
 }
 public void setAge(int age) {
  this.age = age;
 }
というようにします。

ローカルセカンダリインデックスで検索をかける
従来のRangeKeyに対する検索の方法と同じです。
上記は、年齢(age)をセカンダリインデックスとして20才のデータを探している例です。

ローカルセカンダリインデックスの特徴
個人的にポイントと思っているのは下記の点です。
  • テーブル毎に最大5つのローカルセカンダリインデックスを作成可能
  • あくまでも従来のレンジキーに対する代替 
  • 複数のローカルセカンダリインデックスを組み合わせた検索は不可
  • 従来のレンジキーとの組み合わせも不可
  • 紐付けるAttributeによってコストが増える?
従来よりも便利になることは間違いないですが、どういった検索をするかを考えた上でインデックスを定義しておかないといけないわけで、意外と設計の難易度が高いという印象です。

APIの仕様が若干変化している点に注意
パッケージがcom.amazonaws.services.dynamodbv2に変わるとともに、微妙にAPIの仕様が変わってます。今までのコードが動かなくなる可能性が高いので注意が必要でしょう。現状すでにDynamoDBで運用している場合は、移行の際は注意した方がいいです。

2013-01-16

Failed to load the JNI shared library "jvm.dll"

JavaのAuto Updateを実行した後にEclipseを起動したら、
Failed to load the JNI shared library "C:\......jvm.dll"
みたいなエラーが出た。これはどうやら、64bit環境に32bitのものが間違って入ってしまった時に起きるらしい。 というわけで、JREの再インストール。。。。

2013-01-14

Java Pluginの脆弱性問題と動作確認の方法

新聞やネットなどで報道されているように、Oracle Java 7 に脆弱性が確認されました。具体的には、
  • ウェブブラウザ上で動作するJava Pluginに脆弱性がある
ということです。(詳細は、JVNサイトへ

これは、Java Appletと呼ばれるブラウザ上で動作するJavaのソフトウェアが対象です。Javaが世間に出た当初は流行りましたが、昨今ではあまり使われていない古い技術(ソフトウェアの種類)です。しかし、Java Appletが使われているサイトも存在し、いつの間にかブラウザのプラグインとしてインストールされている可能性はあります。
この問題を回避するには、「Javaをアンインストールすること」が一番確実ですが、Javaを利用したシステム開発をしている者にとっては、Javaのアンインストールなどは考えられないことです。また、Javaで動作しているアプリケーションも存在しますし、それらには何の害もありません。
この脆弱性の問題はあくまでのJava Appletに対してのものであり、Javaというプログラミング言語やJavaで動いている全てのソフトウェア、システム、サーバに問題があるわけではありません。

プラグインの無効化方法
Javaをアンインストールできない環境の人は、とりあえず下記のサイトを参考にしてプラグインを無効にして下さい。
Pluginの動作確認
ブラウザでJava Pluginが有効であるかどうかは
で、確認することができます。ただし、このサイトにアクセスする際は下記のことに注意して下さい
  • インストールされていない場合 → インストールするようなメッセージが出るのでそれは無視する(ここで入れたら意味が無い)
  • インストールされている場合(マシン情報等が表示された場合) → プラグインが動いているので無効にする
ちなみに、上記サイト自体が正しく動くのかもちょっと微妙なので、いずれにせよPluginをOFFになっているか確認したほうがいいでしょう。

Javaの今後が心配
Java Pluginの脆弱性の問題は実は今回が初めてということではなく、昨年度の夏頃から同様の脆弱性が指摘され続けてきました。気になるのは、日本のメディアが
プログラム言語「Java(ジャバ)」に情報セキュリティー上の弱点があることがわかり、米国土安全保障省などが使用を控えるよう警告を出した。(朝日新聞
という類の報道をしていること。「Javaというプログラム言語を使うな」とは、CERTも言ってないです。Javaは、サーバ系、組み込み系、Android等、いろいろな用途で使われており、それを使用禁止にするなんてことは現実的にはありえないですし、またその必要もありません(問題があるのはAppletだけですから)。

今後の流れとして、Appletというのは廃止になるかもしれませんね。今はFlashやHTML5もありますし。個人的にはAppletにはちょっとした期待感を持っていたので、そうなると少し残念です。


2012-10-19

Eclipse:jdoconfig.xmlファイルのエラー

最近、Eclipseでウェブアプリを開発しているときに、jdoconfig.xmlファイルに下記のようなエラーが出るようになりました。


これは、どうやらjdoconfigのnamespace定義しているURIが違うって感じのエラーです。実害はないようですが、気持ち悪いですね。このエラーを消す方法ですが、
  • xsi:noNamespaceSchemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig"を思い切って消す(たぶん実害なし?未確認)
  • xsi:schemaLocation="http://java.sun.com/xml/ns/jdo/jdoconfig http://java.sun.com/xml/ns/jdo/jdoconfig_3_0.xsd" を追加する
のいずれかが解決策です。後者の場合は下記のようになります。



2012-10-12

SimpleDBのJava用マッパークラスを公開しました

Amazonの提供するクラウドデータベースの1つSimpleDBのラッパーライブラリを開発しています。SimpleDBには意外にも用意されていないという現実。研究室では以前からHibernateやObjectifyのようなO/Rマッパーライブラリを積極的に利用していましたから、当然同じことをしたくなるわけです。それじゃあ自作しようかということで、院生のタクボ君にいろいろ頑張って調べていろいろコードを書いてもらいました。

で、とりあえずCRUDの基本的なことはだいたいできたので、とりあえず公開です。