JAVA関連のことを調べてみた2020年04月18日

JAVA関連のことを調べてみた2020年04月18日

Androidで電卓アプリ作ってみた

# 概要
シンプルな電卓アプリです。
Androidのお勉強用に作りました。

Android Studio 3.6.2
TableLayout
![caluculation.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/566570/f84b198c-cb91-b52c-3ca6-80b0526cab06.png)

# 苦労したこと
TableLayoutで行をまたいだボタンを作るところ。(+ボタン)

バグ修正。
・小数点を連打できないようにする
・+-×÷=を連打できないようにする
・=ボタンクリック後の挙動いろいろ。

## TableLayoutで行をまたいだボタンを作る方法
Table rowの中にLinearLayoutを入れ子にします。

“`activity_main.xml

元記事を表示

Spring-Batchをストレスなく使う

# Spring-Batchをストレスなく使う

– TLDR;
– spring-batchにはジョブ状態を管理する機能があるが、邪魔なので`application.yml`で無効にできる
– その他の関連する設定についても書く

## application.ymlの設定

– banner-mode: off
– spring-bootの起動時のバナー表示をしない(off,console,logの設定ができる)
– initilization-schema: never
– spring-batch起動時にバッチジョブ用テーブルを初期化するかどうか

“`yaml
spring:
main:
banner-mode: off
batch:
initilization-schema: never
“`

## アノテーション設定
– spring-batchはジョブの状態を保存しようとするが、特にそういった機能はいらない
– ここを参考にしてデータソース自体を作らせないようにする
– [Spring BatchでIn-Memory

元記事を表示

PowerMockでsuperメソッド呼び出しをモックする方法

#はじめに

MockitoとPowermockを利用したJUnitにおいて、どうしても`super`を利用した親クラスの処理をモックする必要があって結構悩んだので、メモしておきます。調べると`PowerMockito.suppress()`を使えってのは結構出てくるのですが、`suppress()`だとスキップ処理されるだけであり、きちんとこちらの想定するモックオブジェクトを返してくれいとうまくJUnitの後続処理を実行できない状態でした。

#テスト対象クラス
サンプルのコードを以下に記載します。DTOクラスは省略します。

親クラス

“`
public class Parent {

public OutputDto execute (InputDto input) {
System.out.println(“Parent#execute()”);
OutputDto out = new OutputDto();
out.setText(input.getText());
return out;
}
}
“`
子クラス

“`
public class

元記事を表示

Ruby と Perl と Java で解く AtCoder ABC 136 D

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder さん、AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Beginner Contest 136 D – Gathering Children](https://atcoder.jp/contests/abc136/tasks/abc136_d)*
Difficulty: 792
# Ruby
“`ruby.rb
s = gets.chomp
f, c = 0, 0
p = []
0.upto(s.size – 1) do |i|
if s[i] == ‘R’ && f == 1
f = 0
p.push(c)
c = 0
elsif s[i] == ‘L’ && f == 0
f = 1
p.push(c)
c =

元記事を表示

最近よく見るライブプレビューなアプリをEclipseで作ってみた・準備編

覚書として残します。
誰かの役に立てば幸いです。

#開発環境/ツール
* Eclipse Version 2019-12 (4.14.0)
[Eclipse IDE 2019-12 R Packages](https://www.eclipse.org/downloads/packages/release/2019-12/r)から導入。日本語化プラグインは導入していない

* Xtext
Eclipseを起動、メニュー`Help -> Install New Software…`を選択
Work with:は`2019-12 – http://download.eclipse.org/releases/2019-12`を選択
`Modeling`を展開すると出てくる

* Eclipse e4 Tools Developer Resources
* Eclipse Plug-in Development Environment
途中まではXtextと同じ
`General Purpose Tools`を展開すると出てくる

#画面イメージ
準備編を最後までこなしたイメージは以下の

元記事を表示

美大生のためのプログラミング入門:キャンバスを作る

参考:Qiita では印刷がうまくできません。プリントしたい人や PDF 化したい人は [http://gurakura.sakura.ne.jp/hellomondrian/makecanvas/](http://gurakura.sakura.ne.jp/hellomondrian/makecanvas/) を見て下さい(同じ内容です)。

# はじめに
プログラムで絵を描くといっても、描く場所がないと始まりません。まずはキャンバス作りから始めていきます。

# 大きさの指定
Processing では、何もプログラムを書かずに、そのまま実行ボタンを押しても小さなウィンドウが表示されます。このウィンドウこそが、プログラムでアニメーションなどが描かれる場所、キャンバスです。

キャンバス(ウィンドウ)のサイズは size という関数で設定します。いきなり「関数」と言われても、何?という疑問もあるかと思いますが、それは順次説明していくとして、まずは以下のプログラム(コードとも言う)を入力し、実行してみて下さい:

“`Java
size(400,300);
“`

何も書かないで実

元記事を表示

Tomcatの起動時にClassNotFoundExceptionとなった時の対応方法

– 環境
– CentOS Linux release 7.6.1810 (Core)
– Eclipse 2019-03 (4.11.0)
– Java1.6.0_41
– Apache Maven 3.2.5

# 事象 : EclipseでTomcatを起動したら怒られた

“`bash:[Consol]タブのログ
情報: Initializing Spring root WebApplicationContext
2020-04-17 10:32:34.216 ERROR Jotm.:144 – Instanciation of TransactionFactory failed
java.rmi.StubNotFoundException: Stub class not found: org.objectweb.jotm.TransactionFactoryImpl_Stub; nested exception is:
java.lang.ClassNo

元記事を表示

ysoserial CommonsCollections2 反序列化分析

## 复现
JDK8u221,生成反序列化文件

“`java
java -jar ysoserial-master-30099844c6-1.jar CommonsCollections2 calc > test.ser
“`

构造反序列化点

“`java
package com.xxe.run;

import java.io.FileInputStream;
import java.io.ObjectInputStream;

public class CommonsCollections2 {
public static void main(String[] args) {
readObject();
}

public static void readObject() {
FileInputStream fis = null;
try {
fis = new FileInputStream(“web/test.ser”);
ObjectInputS

元記事を表示

JMXでログイン情報を管理してみた

「踊ってみた」みたいなタイトルですが、真面目な記事です。

ちょっと前に自分が参加しているプロジェクトでJMXについて調査してみたんですが、これ使えば簡単な設定なら設定画面作らなくてもいいじゃないかと思ったんです。
お客さんには勧めづらいと思うけど、社内の自社製品とかなら設定画面作る工数を削減できるんじゃないかと思って簡単なログイン情報管理できるアプリを作って使用感などを見てみました。

## 環境

今回は簡易機能なのでDBは使用してないです。
ログインするだけの簡単なWebアプリケーションをSpringを使用して作成しました。
使用したライブラリなんかは以下の通りです。

– OpenJDK 13.0.2
– Sprinig Boot 2.2.5
– Thymeleaf 3.0.11
– Apache Commons CLI 1.4
– Tomcat 9.0.31

## ログイン管理の仕様

ログイン管理の仕様について簡単に記載してみます。

– ログインユーザ一覧が閲覧できる。
– 最大ログイン人数が設定できる。
– IDロックが実施できる。

ログイン管理機能についてはこの

元記事を表示

JavaのEnum活用例

Javaを以前仕事で使っていた時に、分かりにくい処理があったのでそれをリファクタリングしたお話です。

# リファクタリング前

リファクタリング前はこのようになってました。

“`Java

private void doProcess() {
A a = initial();
if (!chkfnc1(a)) {
throw new XXXException(x1);
}

if (!chkfnc2(a)) {
throw new XXXException(x2);
}

if (!chkfnc3(a)) {
throw new XXXException(x3);
}

execute(a); //チェック後の実行処理

}

private boolean chkfnc1(a) {}
private boolean chkfnc2(

元記事を表示

Javaの知識まとめ

#ファイル作成・書き込み・読み込み

//ファイル作成
File file = new File(“ファイルパス”);
file.createNewFile();

//ファイル書き込み
FileWriter fw = new FileWriter(file);
fw.write(“書き込み1\r\n”);
fw.write(“書き込み2\r\n”);

//ファイル読み込み
//(上記のファイル書き込みのすぐ後にこれを行ったら1回目のループでc == -1になった)
int c;
FileReader fw = new FIleReader(file);
while( (c = fw.read()) != -1) {
System.out.println( (char)c);
}

//ファイルクローズ
fw.close();

元記事を表示

thymeleaf 〇文字目~ 省略表示方法

#thymeleafでDBから取得した文字列を指定文字数まで表示

今回業務で、ある範囲内に指定文字数を表示し、それ以降は「…」って表示することがあったので、
メモとして記載します。
まだまだ未熟ですので、間違っている箇所等あれば、指摘して頂けると嬉しいです。

##・文字列の長さ
“`Java
“${#strings.length(hoge.str)}” //hoge.strの文字列を取得できる。
“`

##・実際の使い方
“`Java
//10文字以上の場合、9文字目まで表示させて、それ以降は「…」と表示

//それ以外は普通に表示

“`

###・その他
#### isEmpty
“`Java

元記事を表示

SpringBootの初歩の初歩で詰まった話(解決済)

どーも、ふぎとです。

今回は初歩的なエラーの備忘録です。
具体的には「SpringBootとThymeleafを使って、
http://localhost:8080 に”Hello World”と
表示するMVCアプリケーション試作時に出会った
whitelabel error pageへの対処」の記録です。

##まずはプロジェクトの作成

[こちら](https://qiita.com/gevanni/items/c1748f32d5045f63e149)の記事通りに作成しました。
そのまま記事に従ってサーバ起動、localhostのページへ……。

##エラーページがどーん

スクショ忘れましたが、早速エラーページに遭遇。
よくよく見てみると
“This application has no explicit mapping for /error”
とのこと。ふむ?

##とりあえずエラーメッセージで検索
2020-04-16.png[Java データ構造入門] primitive型用の速いArrayDequeを自作する

`Java`で幅優先探索や深さ優先探索を実装する際には, `ArrayDeque`に頂点番号を格納する形で実装する方は多いと思います. しかしこの`ArrayDeque`, `int`のラッパークラスである`Integer`を格納するためauto boxing/unboxingが頻繁に発生してしまい速度はいまいちです.
そこで, 今回は高速な`int`専用のdeque(`IntArrayDeque`)を簡単に実装したいと思います. 実装が簡単な割に効果は高いのでお勧めです.

`IntArrayDeque`クラスを実装するにあたって, 最低限必要な機能を挙げてみると以下のようになると思います.

– 先頭/ 末尾の要素を取得 (`int getFirst()`, `int getLast()`)
– 先頭/ 末尾に要素を追加 (`void addFirst(int v)`, `void addLast(int v)`)
– 先頭/ 末尾の要素を削除 (`int pollFirst()`, `int pollLast()`)
– サイズの取得 (`i

元記事を表示

【初心者でもできる‼】Windows10にJava環境を作る方法(JDK14.0.1)

## 1.Javaとは
– Javaとは、プログラミング言語の一種で、オブジェクト指向が主要パラダイムとして導入されている。
– Java言語は、従来のソフトウェアが抱えていた移植性問題の解決を図り、特定の環境に依存しない理想的なクロスプラットフォーム・プログラムの実現を目指して開発された。

## 2.Javaの準備
Javaを学ぶために必要な準備は、

– `Java環境` → JDK(Java SE Development Kit) , システム環境変数 , コマンドプロンプトなど
– `エディタ` → メモ帳 , テキストエディット , サクラエディタ , Atomなど

上記を用意できたら、エディタにJavaのコードを書き、コマンドプロンプトでコンパイルをして開発を行う。

## 3.Java環境の作り方

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/449867/712cf7f3-3701-d09d-2dc8-ffcbecfab307.png)

1. `Oracle` の [J

元記事を表示

アップキャストとダウキャストとコンストラクタ

import java.util.*;

interface Sample{
//定数はインターフェースに定義できるよ
public final static int num=10;
//抽象メソッド public abstractは自動で作られる
public abstract void hoge();

}

interface Test{
//定数はインターフェースに定義できるよ
public final static int num=10;
//抽象メソッド public abstractは自動で作られる
public abstract void exe();

}

//多重実現
class SampleImp implements Sample,Test{
public void hoge(){

}

public void exe(){

}
}

class A{

public int

元記事を表示

APIをジェネリクス化するコツ

# 概要
ジェネリクスって便利ですよね。でも、記号(型引数)が多くて頭がごちゃごちゃしませんか?
APIをジェネリクス化するおすすめの手順は以下です。

1. 切り出して汎用化したい処理を、まずは具体的な型のままで書く
1. その処理の中で、型を可変にしたいものを洗い出す
1. それらを型引数に置き換え、ジェネリクス化

具体例で見ましょう。

# 簡単な例
以下のようなコードがあります。

“`java
// In: List
// Out: 商品コードをキー、販売数合計を値とするマップ
Map map =
list.stream().collect(
Collectors.groupingBy(SalesLine::getProductCode,
Collectors.summingInt(SalesLine::getQuantity)

元記事を表示

Ruby と Perl と Java で解く AtCoder ARC 081 C

# はじめに
*[AtCoder Problems](https://kenkoooo.com/atcoder/#/)* の Recommendation を利用して、過去の問題を解いています。
AtCoder Problems さん、ありがとうございます。
# 今回のお題
*[AtCoder Regular Contest C – Make a Rectangle](https://atcoder.jp/contests/arc081/tasks/arc081_a)*
Difficulty: 538
# Ruby
“`ruby.rb
n = gets.to_i
c = gets.split.map(&:to_i)
h = {}
n.times do |i|
if h[c[i]]
h[c[i]] += 1
else
h[c[i]] = 1
end
end
s = h.select{|k, v| v >= 4}.keys.sort{|a, b| b<=>a}
t = h.select{|k, v| v

元記事を表示

Tomcat 无文件回显执行命令

## 前言
先知最近出了一批关于tomcat回显的文章,仔细研究了一下,发现可以用来实现“无文件webshell”以及“反序列化执行命令拿到回显”,本文是总结、搬砖。

各位师傅的文章画一下时间线:
1. [《基于内存 Webshell 的无文件攻击技术研究》](https://www.anquanke.com/post/id/198886) 主要应用于Spring
2. [《linux下java反序列化通杀回显方法的低配版实现》](https://xz.aliyun.com/t/7307) 将回显结果写入文件操作符
3. [《Tomcat中一种半通用回显方法》](https://xz.aliyun.com/t/7348) 将执行命令的结果存入tomcat的response返回 shiro无法回显
4. [《基于tomcat的内存 Webshell 无文件攻击技术》](https://xz.aliyun.com/t/7388) 动态注册filter实现回显 shiro无法回显
5. [《基于全局储存的新思路 | Tomcat的一种通用回显方法研究》](https://mp.weixin

元記事を表示

pom.xmlに定義されていないjarでMissing artifactとなった時の対応方法

– 環境
– CentOS Linux release 7.6.1810 (Core)
– Apache Maven 3.2.5
– (Maven用)Java1.8.0_242 (プロジェクト用)Java1.6.0_41

# 事象 : Eclipseでプロジェクトを選択 > [Maven] > [Update Project…]したら怒られた

“`log:[Problems]タブのエラー
Missing artifact javax.resource:connector:jar:1.0
Missing artifact javax.transaction:jta:jar:1.0.1B
“`

プロジェクトのpom.xmlをグレップしてもそんな定義はない・・・はて?

“`bash
$ grep -rn connector –include=pom.xml
$ grep -rn jta –include=pom.xml
$
“`

# 原因 : pom.xml定義されているjarの依存関係にあるjarがないから

### 試行錯誤
Eclips

元記事を表示

OTHERカテゴリの最新記事