``````java ```ここに言語を入力 コード ```コード ```### 前提・実現したいこと ここに質問の内容を詳しく書いてください。 (例)PHP(CakePHP)で●●なシステムを作っています。 ■■な機能を実装中に以下のエラーメッセージが発生しました。 ### 発生している問題・エラーメッセージ javaを使った帳票出力のアプリです。 mainクラスでデータベースから読み込んだ商品別配送先の一覧表を、printクラスで配送先別送付商品に組み替えて、その帳票出力をします。商品別配送先の二次元配列をmainクラスからprintクラスへわたすにのに、static変数を使って行おうとしています。配列の縦横はそのときによって不定なので、staticな配列の宣言にnullを入れたところ次のようなエラーメッセージが出て通りませんでした。 うまくクラス間で配列の受け渡しができる方法を教えてください。引数で処理しようともしましたが、インターフェイスのPrintableの存在が障害になり成功しませんでした。
エラーメッセージ
The field item cannot be declared static in a non-static inner type, unless initialized ith a constant expression.
該当のソースコードこに言語名を入力
java
ソースコード
import static java.awt.Font.*; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.print.PageFormat; import java.awt.print.Printable; import java.awt.print.PrinterException; import java.awt.print.PrinterJob; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.ResultSetMetaData; import java.sql.SQLException; public class DataPrintable implements Printable{ public class Klass{ public static int rowCount; public static String[]item; public static int[][]qty ; } @Override public int print(Graphics g,PageFormat pf,int pageIndex) { if (pageIndex !=0) return NO_SUCH_PAGE; Graphics2D g2= (Graphics2D)g; int columnIndex2 =0; int j = 0; String itemw; String qtyw; float mmpt = 72/25.4f; g2.setFont(new Font(SANS_SERIF,PLAIN,20)); g2.drawString("向け配送商品",35*mmpt,40*mmpt); g2.setFont(new Font(SANS_SERIF,PLAIN,10)); g2.drawString("商品番号 商品名 個数",35*mmpt,40*mmpt); for (columnIndex2 = 2;columnIndex2<Klass.qty[0].length;columnIndex2++) { for (j=0;j<Klass.item.length;j++) { itemw = Klass.item[j]; qtyw =String.valueOf(Klass.qty[j][columnIndex2-2]); g2.drawString(itemw, 35*mmpt, (48+8*j)*mmpt); g2.drawString(qtyw, 40*mmpt, (48+8*j)*mmpt); } } return PAGE_EXISTS; } public static void main(String[]args) { try { Class.forName("org.h2.Driver");} catch(ClassNotFoundException e1) { e1.printStackTrace();} Connection con = null; try { con = DriverManager.getConnection("jdbc:h2:tcp://localhost/~/mydb"); PreparedStatement pstmt = con.prepareStatement("SELECT * FROM ITEMS"); ResultSet rs = pstmt.executeQuery(); ResultSetMetaData meta = rs.getMetaData(); rs.afterLast(); Klass.rowCount = rs.getRow(); rs.beforeFirst(); int i; int columnIndex; int columnCount = meta.getColumnCount()+1; Klass.item = new String[Klass.rowCount]; Klass.qty = new int[columnCount][Klass.rowCount]; for (columnIndex = 2; columnIndex < columnCount;columnIndex++) { i=1; while(rs.next()) { Klass.item[i] = rs.getString(1); Klass.qty[i][columnIndex-2] = rs.getInt(columnIndex); i +=1; } } PrinterJob pj = PrinterJob.getPrinterJob(); pj.setPrintable(new DataPrintable()); if (pj.printDialog()) { try{pj.print();} catch(PrinterException e) {System.out.println(e);}} } catch(SQLException e) {e.printStackTrace(); } finally { if(con != null) { try { con.close(); }catch(SQLException e) { e.printStackTrace(); } } } }
}```
試したこと
Klass クラスの配列Klass.item,Klass.qtyを初期化しようとした。=null;,=new String[]item;,new int[][]qty;では上記の絵r-メッセージが出て駄目だった。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
OS:windows10,エディター:Eclipse
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー