我正在实现一个接口,其功能类似于可以包含对象类型的表.接口指定以下功能:
double[] getDoubles(int columnIndex);
Run Code Online (Sandbox Code Playgroud)
我感到难过的是,在我的实现中,我将表数据存储在2D Object数组(Object[][] data)中.当我需要返回值时,我想要执行以下操作(假设getDoubles()只会在包含双精度的列上调用,因此将不会ClassCastExceptions):
double[] getDoubles(int columnIndex) {
return (double[]) data[columnIndex];
}
Run Code Online (Sandbox Code Playgroud)
但是 - Java不允许Object[]强制转换为double[].将它转换Double[]为正常是因为它Double是一个对象而不是一个原语,但我的接口指定数据将作为一个返回double[].
所以我有两个问题:
Object[][]表中获取列数据并返回原语数组吗?Double[],是否会对性能产生影响?我习惯com.sun.image.codec.jpeg.JPEGImageEncoder在我的webapp中处理JPEG图像,如图表和其他图像.现在,我正在更新我的机器以使用JDK7,但是这个版本不赞成这个类.以下是我需要更改的代码:
public void processChart(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("image/jpeg");
out = response.getOutputStream();
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
response.setDateHeader("Expires",0);
try {
int w = Integer.parseInt(request.getParameter("WIDTH"));
int h = Integer.parseInt(request.getParameter("HEIGHT"));
java.awt.image.BufferedImage ChartImage = new java.awt.image.BufferedImage(w,h,java.awt.image.BufferedImage.TYPE_INT_RGB);
java.awt.Graphics2D ChartGraphics = ChartImage.createGraphics();
Chart c = getChart(request);
c.setSize(w,h);
c.paint(ChartGraphics);
// CODE BELOW TO CHANGE...
com.sun.image.codec.jpeg.JPEGImageEncoder encoder =
com.sun.image.codec.jpeg.JPEGCodec.createJPEGEncoder(out);
encoder.encode(ChartImage);
} catch (Exception e) {
e.printStackTrace();
}
}
private Chart getChart(HttpServletRequest request) {
chartLoader loader = new chartLoader(null);
loader.paintDirect = true;
java.util.Enumeration ps …Run Code Online (Sandbox Code Playgroud) 我需要将pdf转换为字节数组,反之亦然.
谁能帮我?
这就是我转换为字节数组的方式
public static byte[] convertDocToByteArray(String sourcePath) {
byte[] byteArray=null;
try {
InputStream inputStream = new FileInputStream(sourcePath);
String inputStreamToString = inputStream.toString();
byteArray = inputStreamToString.getBytes();
inputStream.close();
} catch (FileNotFoundException e) {
System.out.println("File Not found"+e);
} catch (IOException e) {
System.out.println("IO Ex"+e);
}
return byteArray;
}
Run Code Online (Sandbox Code Playgroud)
如果我使用以下代码将其转换回文档,则会创建pdf.但是它说'Bad Format. Not a pdf'.
public static void convertByteArrayToDoc(byte[] b) {
OutputStream out;
try {
out = new FileOutputStream("D:/ABC_XYZ/1.pdf");
out.close();
System.out.println("write success");
}catch (Exception e) {
System.out.println(e);
}
Run Code Online (Sandbox Code Playgroud) 我有一个部分填充的对象数组,当我遍历它们时,我试图检查所选对象是否null在我用它做其他东西之前.然而,甚至检查它是否null似乎是通过a NullPointerException.array.length将包括所有null元素.你如何检查null数组中的元素?例如,在下面的代码中将为我抛出一个NPE.
Object[][] someArray = new Object[5][];
for (int i=0; i<=someArray.length-1; i++) {
if (someArray[i]!=null) { //do something
}
}
Run Code Online (Sandbox Code Playgroud) JTable当我们做一个fireTableDataChanged()或fireTableRowsUpdated()来自时,我们看到选择被清除TableModel.
这是预期的,还是我们做错了什么?我没有看到JTable关于清除/保留模型更新选择的(或其他相关类)的任何属性.
如果这是默认行为,是否有一种防止这种情况的好方法?也许某种方式在更新之前"锁定"选择并在之后解锁?
开发人员一直在尝试在更新之前保存选择并重新应用它.这有点慢.
这是Windows XP上的Java 1.4.2,如果这很重要的话.我们仅限于基于我们使用的某些供应商代码的版本.
我认为这里肯定会有一些我不知道的微妙内容.考虑以下:
public class Foo<T> {
private T[] a = (T[]) new Object[5];
public Foo() {
// Add some elements to a
}
public T[] getA() {
return a;
}
}
Run Code Online (Sandbox Code Playgroud)
假设您的main方法包含以下内容:
Foo<Double> f = new Foo<Double>();
Double[] d = f.getA();
Run Code Online (Sandbox Code Playgroud)
你将获得一个无法投射CastClassException的消息.java.lang.Objectjava.lang.Double
谁能告诉我为什么?我的理解ClassCastException是,当您尝试将对象转换为无法转换的类型时,它会被抛出.也就是说,它不是一个实例的子类(引用文档).例如:
Object o = new Double(3.);
Double d = (Double) o; // Working cast
String s = (String) o; // ClassCastException
Run Code Online (Sandbox Code Playgroud)
似乎我可以做到这一点.如果a只是一个T数组T[],而不是一个数组,我们可以a毫无问题地得到它.为什么数组打破了这个?
谢谢.
当我的applet第一次从干净的环境启动时,事情按照我期望的方式工作.我产生了两个线程,一个用于通用处理,一个用于图形.我从事件调度线程执行所有GUI操作调用.从appletviewer正确处理启动/停止,但不重启/重新加载.我drawCanvas在Applet的内容窗格中将Canvas称为唯一的Component,我使用双缓冲来绘制它.
我在这里观察问题:
public void start() {
/* ... some stuff */
executeOnEDTAndWait(
new Thread() {
@Override
public void run() {
/* ... more stuff ... */
setupDrawCanvas();
if( drawCanvas.isDisplayable() ) {
drawCanvas.createBufferStrategy(2);
/* ... some more stuff */
} else {
/* This is where it runs into difficulties */
}
/* ... */
Run Code Online (Sandbox Code Playgroud)
在哪里setupDrawCanvas定义如下:
private void setupDrawCanvas() {
setVisible(false);
setIgnoreRepaint(true);
getContentPane().removeAll();
drawCanvas = new Canvas();
drawCanvas.setName("drawCanvas");
drawCanvas.setSize(
newDrawCanvasDimension.width,
newDrawCanvasDimension.height);
drawCanvas.setIgnoreRepaint(true);
getContentPane().add(drawCanvas);
getContentPane().setVisible(true);
drawCanvas.setVisible(true);
setVisible(true);
} …Run Code Online (Sandbox Code Playgroud) 是否有任何好的书籍或网站可以创建一个JTable?我想让一列可编辑.我想实际将一个继承的JCheckBox组件(我们在这里创建)放到一个表列中,而不是仅仅JCheckBox根据它是一个可编辑的boolean字段放入表.
我有JFC Swing Tutorial第二版的书,但我想知道是否有其他的例子我可以看一下并学习如何更好地处理表格.这本书似乎只是把java的"踪迹"放在网上并把它放在书中.
我正在重新阅读这些东西,只是好奇是否有人找到了可能有助于更多的东西.
我正在用java编写一个图编辑器.此应用程序可以选择导出到各种标准图像格式,如.jpg,.png等.当用户单击文件 - >导出时,您将获得JFileChooser其中包含FileFilters 的数量.jpg,.png等等.
现在这是我的问题:
有没有办法将默认值的扩展调整到所选的文件过滤器?例如,如果文档名为"lolcat",则在选择png过滤器时,默认选项应为"lolcat.png",当用户选择jpg文件过滤器时,默认值应自动更改为"lolcat.jpg".
这可能吗?我该怎么做?
编辑:基于下面的答案,我写了一些代码.但它还没有完全奏效.我添加了一个propertyChangeListener到FILE_FILTER_CHANGED_PROPERTY,但似乎在这个方法getSelectedFile()返回null.这是代码.
package nl.helixsoft;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.filechooser.FileFilter;
public class JFileChooserTest {
public class SimpleFileFilter extends FileFilter {
private String desc;
private List<String> extensions;
private boolean showDirectories;
/**
* @param name example: "Data files"
* @param glob example: "*.txt|*.csv"
*/
public SimpleFileFilter …Run Code Online (Sandbox Code Playgroud) 我想再次进入java(已经有几年了).我从来没有真正在java中进行任何GUI编码.我一直在使用Netbeans来开始这个.
在工作中使用C#中的winforms时,我使用usercontrols来构建UI的一部分并动态地将它们添加到表单中.
我一直在尝试JPanels在C#中使用类似用户控件.我创建了一个JPanel名为的表单BlurbEditor.这有一些简单的控制.我试图在运行时将其添加到另一个面板上的按钮事件.
这是我认为可行的代码:
mainPanel.add(new BlurbEditor());
mainPanel.revalidate();
//I've also tried all possible combinations of these too
//mainPanel.repaint();
//mainPanel.validate();
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这不起作用.我究竟做错了什么?
java ×10
swing ×5
arrays ×4
jtable ×2
applet ×1
autoboxing ×1
awt ×1
generics ×1
java-7 ×1
jfilechooser ×1
pdf ×1
tablemodel ×1