質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

1回答

1494閲覧

スレッドで表示した画面にタブを表示したいのだが、うまく動かない・・・

yasu_abu7

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2018/08/31 05:18

前提・実現したいこと

スレッドを使って画面を表示し、タブを表示したいのですが、うまくいきません。
なぜうごかないのかわかる方教えていただきたいと思い記載しました。

発生している問題・エラーメッセージ

Exception in thread "Thread-3" java.lang.NullPointerException

該当のソースコード

java

1//GamenSeni.java 2import javax.swing.JFrame; 3import javax.swing.JPanel; 4import javax.swing.JTabbedPane; 5import javax.swing.JTextField; 6import javax.swing.JButton; 7import javax.swing.JLabel; 8import javax.swing.JList; 9import javax.swing.DefaultListModel; 10import javax.swing.ImageIcon; 11import javax.swing.JOptionPane; 12import java.awt.Container; 13import java.awt.Graphics; 14import java.awt.Panel; 15import java.awt.BorderLayout; 16import java.awt.Color; 17import java.awt.event.MouseEvent; 18import java.awt.event.MouseListener; 19import java.awt.image.BufferedImage; 20import java.awt.event.MouseAdapter; 21import java.awt.event.ActionListener; 22import java.awt.event.ActionEvent; 23import org.opencv.core.Core; 24import org.opencv.core.Mat; 25import org.opencv.core.Size; 26import org.opencv.videoio.VideoCapture; 27import org.opencv.imgproc.Imgproc; 28public class GamenSeni extends JFrame { 29 static GamenSeni frame; 30 JButton button1,button2,button3,button4; 31 private static final long serialVersionUID = 1L; 32 private BufferedImage image; 33 34 public static void main(String args[]) { 35 //最初に生成されるフレームの画面の名前 36 frame = new GamenSeni("GUI_Sample"); 37 //表示させるためにtrueを定義している 38 frame.setVisible(true); 39 System.loadLibrary(Core.NATIVE_LIBRARY_NAME); 40 } 41 public GamenSeni(String title){ 42 super(); 43 setTitle(title); 44 setBounds(550,250,800,600); 45 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 46 47 //最初の画面 48 JPanel p = new JPanel(); 49 p.setBackground(Color.WHITE); 50 //自分で場所を決めるためのnull 51 p.setLayout(null); 52 53 //設定用の画像を表示させている場所 54 ImageIcon settei = new ImageIcon("settei.png"); 55 button4 = new JButton("設定",settei); 56 button4.setBounds(10, 450, 149, 100); 57 button4.setBackground(Color.WHITE); 58 button4.addActionListener( 59 new ActionListener(){ 60 public void actionPerformed(ActionEvent event){ 61 System.out.print("設定ボタンが押されました"+'\n'); 62 //設定ボタンを押した時の処理 63 //ボタン1押した時に別のフレームを生成する場所:タイトル(設定画面) 64 JFrame y = new JFrame(); 65 y.setLayout(null); 66 y.setTitle("設定画面"); 67 y.setBounds( 300,200,800,600 ); 68 y.setVisible(true); 69 /* 70 ボタンやテキストボックスやラベルの名前を決め、生成している場所 71 */ 72 button_tukamu1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event){ 73 //System.out.print("画面生成ボタンが押されました"+'\n'); 74 JFrame i = new JFrame(); 75 i.setLayout(null); 76 i.setTitle("画面"); 77 i.setBounds(500, 500, 400, 400); 78 i.setVisible(true); 79 }}); 80 } 81 } 82 ); 83 84 button1 = new JButton("スタート"); 85 //ボタンの大きさを決める(x,y)が表示させる場所(w,h)が幅よ高さ 86 button1.setBounds(10, 10, 100, 100); 87 //ボタン1クリックしたときのイベント処理 88 button1.addActionListener( 89 new ActionListener(){ 90 public void actionPerformed(ActionEvent event){ 91 //ボタン1押した時に別のフレームを生成する場所:タイトル(ボタン1設定画面) 92 //スタートボタンを押した時の処理 93 JFrame f = new JFrame(); 94 f.setLayout(null); 95 f.setTitle("スタートボタン設定画面"); 96 f.setBounds( 400,200,500,300 ); 97 f.setVisible(true); 98 JButton button_1 = new JButton("おしてもええんやで"); 99 button_1.setBounds(10,10,100,100 ); 100 f.add(button_1); 101 button_1.addActionListener(new ActionListener(){public void actionPerformed(ActionEvent event1){ 102 //おしてもええんやでボタンを押した時の処理 103 JFrame o = new JFrame(); 104 o.setLayout(null); 105 o.setTitle("ボタン_1押した時の画面"); 106 o.setBounds(600, 600, 400, 400); 107 o.setVisible(true); 108 }}); 109 } 110 } 111 ); 112 113 button2 = new JButton("カメラ"); 114 button2.setBounds(120, 10, 100, 100); 115 button2.addActionListener( 116 new ActionListener(){ 117 public void actionPerformed(ActionEvent event){ 118 //カメラボタンをクリックしたときの処理 119 upcamera(event); 120 cameraHenkou(event); 121 } 122 } 123 ); 124 125 button3 = new JButton("緊急停止"); 126 button3.setBounds(680, 10, 100, 100); 127 button3.addActionListener( 128 new ActionListener(){ 129 public void actionPerformed(ActionEvent event){ 130 //緊急停止ボタンを押した時の処理 131 JFrame r = new JFrame(); 132 r.setTitle("予備画面"); 133 r.setBounds( 450,500,500,300 ); 134 r.setVisible(true); 135 } 136 } 137 ); 138 p.add(button1); 139 Container contentPane = getContentPane(); 140 //getContentPane().add(tabbedpane, BorderLayout.CENTER); 141 142 //contentPane.add(setei,BorderLayout.CENTER); 143 getContentPane().add(p, BorderLayout.CENTER); 144 145 } 146 /*カメラを表示させるための設定場所*/ 147 public void upcamera(ActionEvent event){ 148 ThreadTest0 tup0 = new ThreadTest0(); 149 tup0.start(); 150 } 151 class ThreadTest0 extends Thread{ 152 public void run(){ 153 gui_sirial.camera(1); 154 } 155 } 156 //カメラのしきい値やHSV変更画面の設定 157 public void cameraHenkou(ActionEvent event){ 158 ThreadTest1 tup1 = new ThreadTest1(); 159 tup1.start(); 160 } 161 class ThreadTest1 extends Thread{ 162 public void run(){ 163 // cameraHenkou.cameraHenkou(1); 164 new cameraHenkou(); 165 } 166 } 167} 168 169//cameraHenkou.java 170import javax.swing.JFrame; 171import javax.swing.JPanel; 172import javax.swing.JTabbedPane; 173import javax.swing.JTextField; 174import javax.swing.JButton; 175import javax.swing.JLabel; 176import javax.swing.JList; 177import javax.swing.DefaultListModel; 178import javax.swing.ImageIcon; 179import javax.swing.JOptionPane; 180import java.awt.Container; 181import java.awt.Dimension; 182import java.awt.EventQueue; 183import java.awt.Graphics; 184import java.awt.Panel; 185import java.awt.BorderLayout; 186import java.awt.Color; 187import java.awt.event.MouseEvent; 188import java.awt.event.MouseListener; 189import java.awt.image.BufferedImage; 190import java.awt.event.MouseAdapter; 191import java.awt.event.ActionListener; 192import java.awt.event.ActionEvent; 193public class cameraHenkou extends JPanel{ 194 JPanel contentPane = new JPanel(); 195 cameraHenkou(){ 196 JTabbedPane tabbedpane; 197 JTextField indexText; 198 JFrame frame = new JFrame(); 199 frame.setBounds(500, 500, 500, 500); 200 frame.setTitle("カメラのしきい値・HSV変更画面"); 201 frame.setVisible(true); 202 /*JPanel Panel = new JPanel(); 203 Panel.setSize(new Dimension(400,400)); 204 frame.setContentPane(Panel);*/ 205 tabbedpane = new JTabbedPane(); 206 JPanel tabPanel1 = new JPanel(); 207 JPanel tabPanel2 = new JPanel(); 208 tabbedpane.addTab("しきい値", tabPanel1); 209 tabbedpane.addTab("HSV", tabPanel2); 210 getContentPane().add(tabbedpane, BorderLayout.CENTER); 211 //contentPane.add(tabbedpane, BorderLayout.CENTER); 212 //contentPane.add(Panel, BorderLayout.CENTER); 213 //contentPane.add(Panel, BorderLayout.PAGE_END); 214 } 215}

試したこと

いろんなサイトを見て、勉強しながら製作しています。

補足情報(FW/ツールのバージョンなど)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

umyu

2018/08/31 09:42

Exception in thread "Thread-3" java.lang.NullPointerException以外のエラーメッセージもでていませんか?質問文に追記していただけませんか。
starmineouji

2018/09/02 09:30

スタックトレースといわれる、どこで例外が起きたのか分かる文がないため分かりません。
guest

回答1

0

まず、javaではswing+マルチスレッドは推奨されてないはずです。https://docs.oracle.com/javase/jp/8/docs/api/javax/swing/package-summary.html#threading
(バージョンについて特に書かれてなかったので8ですが)

修正を手伝ってもらうとしても、まずソースを分割してください。こんな感じに

java

1public class GamenSeni{}

java

1public class cameraHenkou{}

あとインポート文は*でまとめるなど、もう少し見やすいソースを目指してみてください。

と無駄な話のほうが多かったですが(すいません)スレッドを使わないソースを目指してみてください。

投稿2018/10/06 03:32

yukkuri

総合スコア624

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問