小编asa*_*n74的帖子

在构造函数警告中泄漏这个

我想避免(大多数)Netbeans 6.9.1的警告,我的'Leaking this in constructor'警告有问题.

我理解这个问题,在构造函数中调用一个方法并传递" this"是危险的,因为" this"可能没有完全初始化.

很容易在我的单例类中修复警告,因为构造函数是私有的,只能从同一个类中调用.

旧代码(简化):

private Singleton() {
  ...
  addWindowFocusListener(this);
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  ...
}
Run Code Online (Sandbox Code Playgroud)

新代码(简化):

private Singleton() {
  ...
}

public static Singleton getInstance() {

  ...
  instance = new Singleton();
  addWindowFocusListener( instance );
  ...
}
Run Code Online (Sandbox Code Playgroud)

如果构造函数是公共的并且可以从其他类调用,则此修复不起作用.如何修复以下代码:

public class MyClass {

  ...
  List<MyClass> instances = new ArrayList<MyClass>();
  ...

  public MyClass() {
    ...
    instances.add(this);
  }

}
Run Code Online (Sandbox Code Playgroud)

当然我想要一个修复,它不需要使用这个类修改我的所有代码(例如通过调用init方法).

java constructor netbeans this netbeans-6.9

79
推荐指数
4
解决办法
5万
查看次数

过于复杂的oracle jdbc BLOB处理

当我使用jdbc瘦驱动程序搜索Web以将BLOB插入Oracle数据库时,大多数网页都建议采用三步法:

  1. 插入empty_blob()值.
  2. 选择行for update.
  3. 插入实际价值.

这对我来说很好,这是一个例子:

Connection oracleConnection = ...

byte[] testArray = ...

PreparedStatement ps = oracleConnection.prepareStatement(
    "insert into test (id, blobfield) values(?, empty_blob())");
ps.setInt(1, 100);
ps.executeUpdate();
ps.close();
ps = oracleConnection.prepareStatement(
    "select blobfield from test where id = ? for update");
ps.setInt(1, 100);
OracleResultSet rs = (OracleResultSet) ps.executeQuery();
if (rs.next()) {
    BLOB blob = (BLOB) rs.getBLOB(1);
    OutputStream outputStream = blob.setBinaryStream(0L);
    InputStream inputStream = new ByteArrayInputStream(testArray);
    byte[] buffer = new byte[blob.getBufferSize()];
    int byteread = 0;
    while …
Run Code Online (Sandbox Code Playgroud)

java oracle blob jdbc clob

31
推荐指数
4
解决办法
4万
查看次数

使用java将透明gif/png转换为jpeg

我想使用Java将gif图像转换为jpeg.它适用于大多数图像,但我有一个简单的透明gif图像:

输入gif图像http://img292.imageshack.us/img292/2103/indexedtestal7.gif

[如果图像丢失:它是一个蓝色圆圈,周围有透明像素]

当我使用以下代码转换此图像时:

File file = new File("indexed_test.gif");
BufferedImage image = ImageIO.read(file);
File f = new File("indexed_test.jpg");
ImageIO.write(image, "jpg", f);
Run Code Online (Sandbox Code Playgroud)

此代码可以在不抛出异常的情况下工作,但会导致无效的jpeg图像:

输出jpeg图像

[如果图像丢失:IE无法显示jpeg,Firefox会显示无效颜色的图像.]

我正在使用Java 1.5.

我还尝试使用gimp将示例gif转换为png并使用png作为Java代码的输入.结果是一样的.

这是JDK中的错误吗?如何在没有第三方库的情况下正确转换图像?

更新:

答案表明jpeg转换无法正确处理透明度(我仍然认为这是一个错误)并建议使用预定义颜色替换透明像素的解决方法.这两种建议的方法都非常复杂,所以我实现了一个更简单的方法(将作为答案发布).我接受了第一个已发布的答案(Markus).我不知道哪种实现更好.我选择了最简单的一个,但我发现它不起作用的gif.

java transparency jpeg gif java-io

20
推荐指数
3
解决办法
3万
查看次数

使用Java 1.5打开文件的跨平台方式

我正在使用Java 1.5,我想启动相关的应用程序来打开文件.我知道Java 1.6引入了Desktop API,但我需要一个Java 1.5的解决方案.

到目前为止,我找到了一种在Windows中执行此操作的方法:

Runtime.getRuntime().exec(new String[]{ "rundll32", 
                          "url.dll,FileProtocolHandler", fileName });
Run Code Online (Sandbox Code Playgroud)

有没有跨平台的方式来做到这一点?或者至少是Linux的类似解决方案?

java linux jdk1.5 file-association

11
推荐指数
4
解决办法
1万
查看次数

HTML自动图像使用像素和百分比约束调整大小

如何使用以下约束将图像添加到HTML页面:

  • 不允许升级(如果图片宽度为400像素,我不想将其调整为600).
  • 如果包含元素小于图像,则应缩小图像.
  • 保持长宽比例.

例如,我有一个图像(400x300).如果包含元素宽度为600像素,我想将图像显示为400x300.如果包含元素的宽度为200像素(例如它是移动浏览器),我想将图像显示为200x150.

我正在寻找一个纯CSS解决方案(如果可能的话)而没有硬连接图像大小.

html css image

10
推荐指数
2
解决办法
6万
查看次数

JasperReports html和pdf输出

我想使用JSP创建一个动态报告网页.基本上它应该包含以下部分:

  1. 过滤:用户可以指定过滤条件并按下过滤按钮.
  2. HTML输出:可以在此处看到过滤器的结果.它是一个大的html页面(如果一个页面太大,则为几个页面).它可能包含指向系统其他部分的链接.
  3. PDF输出:用户应该能够保存报告的pdf版本以进行打印或存档.

我不想自己实现所有内容,而是想使用java报告库,所以我使用JasperReports创建了我的报告.pdf输出非常好,但报告的html导出不适合我的目的.

JasperReport的html导出创建了一个包含大量硬连线代码的html文件,以及相当随机的配置选项.例如,默认情况下它创建一个带白色背景的表(<table style="... bgcolor="white" ... ">),可以使用IS_WHITE_PAGE_BACKGROUND选项关闭,另一方面cellpadding="0" cellspacing="0" border="0",在table标签中硬连线.它也很奇怪(并使css样式很难)而不是span文件类,html文件包含<span style="font-family: sansserif; color: #000000; font-size: 10.0px;">我的所有字段.

当然我可以使用JSP实现html输出,但这意味着我必须设计输出两次(一次在jrxml中用于JasperReports,一次在JSP中),我必须重新实现报告功能(如小计计算,总计算,分组) ......)违反DRY原则.

实现这个的最佳实践是什么?是否可以使用JasperReports创建更好的HTML导出?

html java jsp reporting jasper-reports

8
推荐指数
1
解决办法
1万
查看次数

Java Listener继承

我有一个java类,它触发自定义java事件.代码的结构如下:

public class AEvent extends EventObject {
...
}

public interface AListener extends EventListener {

  public void event1(AEvent event);

}

public class A {

  public synchronized void addAListener(AListener l) {
  ..
  }

  public synchronized void removeAListener(AListener l) {
  ..
  }

  protected void fireAListenerEvent1(AEvent event) {
  ..
  }
}
Run Code Online (Sandbox Code Playgroud)

一切正常,但我想创建一个新的A子类(称之为B),它可能会触发一个新事件.我正在考虑以下修改:

public class BEvent extends AEvent {
...
}

public interface BListener extends AListener {

  public void event2(BEvent event);
}

public class B extends A {

  public synchronized void addBListener(BListener l) { …
Run Code Online (Sandbox Code Playgroud)

java events inheritance listener

7
推荐指数
2
解决办法
6649
查看次数

Oracle的object_type JOB的dbms_metadata.get_ddl

我想为我的大多数数据库对象创建ddl脚本.dbms_metadata.get_ddl适用于大多数对象类型.例如,以下内容为视图创建ddl:

select dbms_metadata.get_ddl ( 'VIEW', 'SAMPLE_VIEW') from dual
Run Code Online (Sandbox Code Playgroud)

另一方面,它不适用于object_type'JOB'.下列:

select dbms_metadata.get_ddl( 'JOB', 'SAMPLE_JOB' ) from dual
Run Code Online (Sandbox Code Playgroud)

给出以下错误:

ORA-31604: invalid NAME parameter "NAME" for object type JOB in function SET_FILTER
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 116
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4705
ORA-06512: at "SYS.DBMS_METADATA_INT", line 8582
ORA-06512: at "SYS.DBMS_METADATA", line 2882
ORA-06512: at "SYS.DBMS_METADATA", line 2748
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1
Run Code Online (Sandbox Code Playgroud)

如果我使用列出我的工作

select * from user_objects where object_type='JOB'
Run Code Online (Sandbox Code Playgroud)

它显示了SAMPLE_JOB(就像它显示了SAMPLE_VIEW,如果过滤了object_type ='VIEW').

为什么它适用于VIEW(以及TABLE,INDEX,TRIGGER,...)而不适用于JOB?

我正在使用Oracle 10g.

oracle jobs oracle10g dbms-metadata ora-06512

6
推荐指数
1
解决办法
3万
查看次数

lang语重言语常数超出范围警告

如果我使用clang编译以下简单程序(test.c)

#include <stdio.h>

typedef enum {
    a,
    b
} sample_enum_t;


int main() {
    sample_enum_t sample_enum = -1;
    if (sample_enum == -1) {
        printf("Equals\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

编译给我警告:

$ clang -o test test.c
test.c:11:21: warning: comparison of constant -1 with expression of type 'sample_enum_t' is always false [-Wtautological-constant-out-of-range-compare]
    if (sample_enum == -1) {
        ~~~~~~~~~~~ ^  ~~
1 warning generated.
Run Code Online (Sandbox Code Playgroud)

比较不总是错误的,这显然是不正确的,如果我执行程序,它将以“等于”打印:

$ ./test 
Equals
Run Code Online (Sandbox Code Playgroud)

是叮当声还是我遗漏了一些东西?我确实知道,将-1分配给sample_enum变量不是一个好主意,但这是有效的行,因此clang不会因为该行而向我发出警告。

我正在使用clang 3.5.2

c clang compiler-warnings

5
推荐指数
1
解决办法
1401
查看次数

在Oracle Package Body中使用Pragma

我想创建一个Oracle Package和两个函数:public function(function_public)和private one(function_private).public函数在sql语句中使用私有函数.

没有编译指示代码不编译(PLS-00231: function 'FUNCTION_PRIVATE' may not be used in SQL)

CREATE OR REPLACE PACKAGE PRAGMA_TEST AS
  FUNCTION function_public(x IN VARCHAR2) RETURN VARCHAR2;
END PRAGMA_TEST;

CREATE OR REPLACE PACKAGE BODY PRAGMA_TEST AS
  FUNCTION function_private(y IN VARCHAR2) RETURN VARCHAR2 IS
  BEGIN
     return 'z';
  END;

  FUNCTION function_public(x IN VARCHAR2) RETURN VARCHAR2 IS
  ret VARCHAR2(100);
  BEGIN
     SELECT 'x' || function_private(x) INTO ret FROM dual;
     return ret;
  END;
END PRAGMA_TEST;
Run Code Online (Sandbox Code Playgroud)

如果我添加WNDS, WNPSpragma,代码将编译function_private.在我看来,pragma只能在包声明中使用,而不能在包体中使用,所以我必须 …

oracle plsql pragma package

4
推荐指数
1
解决办法
1万
查看次数